我是c ++的新手,并且要创建一个带有c ++的dll,它将从excel vba访问,在dll中我有一个函数,它将字符串作为参数并修改字符串并且修改字符串atlast将是在vba中使用。
再一步:
1.a dll,带有一个带字符串指针的函数作为参数。
2.vba空字符串将传递给函数。
3.dll将修改或操纵字符串。
4.最后,修改后的字符串将在vba中使用。
dll中的函数有点像:
extern“C”_declspec(dllexport)void WINAPI ModifyStr(char * str) { Str =“你好” } 编译器抛出以下错误“已弃用从字符串常量转换为char *”
我通过编写
来修改了这个功能_declspec(dllexport)void WINAPI ModifyStr(string ** Str) { * Str = new string(“hello”); } 这段代码编译得很好但是当我试图从vba调用该函数时导致程序崩溃。请帮我摆脱这个问题并构建我的dll而没有任何错误。
答案 0 :(得分:0)
来自MSDN
VBA String在传递ByVal时作为指向字节串BSTR结构的指针传递,在传递ByRef时作为指针传递指针
在你的dll中你应该使用BSTR str = SysAllocString(L"Hello World!");
来分配字符串。 COM内存管理应该处理释放。