VBA使用用法 CorelDRAW X6 62bit
'// For CorelDRAW X6-2023 62bit
Public Declare PtrSafe Function i18n Lib "C:\TSP\lyvba.dll" (ByVal str As String, ByVal code As Long) As String
Sub Test_i18n()
MsgBox i18n("Nodes", 2052)
MsgBox i18n("Nodes", 1033)
MsgBox i18n("Preset Property", 2052)
End Sub
C++ 编译 DLL 的源码: 有兴趣的玩的,自己手工敲吧,因为这个有很多坑,只有自己从坑里爬出来才算真掌握
当然代码应该还有BUG,不过能玩就行
在 VBA 中调用 C++ DLL 函数时,需要注意数据类型的兼容性问题。特别是字符串操作,因为在 C++ 中字符串通常是使用字符数组或指针来表示。网上搜了很多方法,也问了GPT,好像没有完全正确的描述。
比如 GPT 说 在 VBA 中,String 类型通常被实现为 Unicode 字符串,即每个字符占用两个字节。如果需要将 VBA 中的 Unicode 字符串传递给 C 语言的 DLL,需要进行一些格式化和类型转换操作,以便使 C 函数能够正确地接受和处理字符串参数。
但是 CorelDRAW X6 VBA
实际 String
是本地字符集的。传入到C++中,需要 BSTR是Microsoft定义的一种字符串数据类型 转接,而又要按 类似 char 单字节处理。
代码中使用(char*)
和 string
直接把 BSTR
转成了 C++ 数据结构
BSTR english;
string key = string((char*)english);
DLL 返回字符串 到VBA,还是使用了单字节的转换函数 CharToBSTR
BSTR CharToBSTR(const char* str)
{
// 获取char*字符串的长度(以字节为单位)
int len = strlen(str);
// 分配BSTR字符串的内存(按字节分配)
BSTR bstr = SysAllocStringByteLen(nullptr, len);
// 将char*字符串的内容逐字节复制到BSTR字符串中
memcpy(bstr, str, len);
return bstr;
}
0 条评论