2012-07-12 47 views
0

我是一个新手在c + +和创建一个DLL的C + +将从Excel VBA访问,DLL内我有一个函数,将字符串作为参数和修改字符串,最后修改后的字符串将在vba中使用。一个c + + dll来操纵字符串在vba中使用

以下步骤一次以上:

1.A DLL与字符串的指针作为参数的函数。

2.vba空字符串将被传递给函数。

3.该DLL将修改或操纵字符串。

4.finally修改后的字符串将在vba中使用。

的dll内部的功能有些类似:

的extern “C” _declspec(dllexport)的空隙WINAPI ModifyStr(字符* STR) { 海峡= “你好” } 以下错误被抛出编译器 “从字符串常量弃用转换为char *”

我通过写

_declspec(dllexport)的空隙WINAPI ModifyStr(串** STR) {修改的功能* Str = new string(“hello”); } 这段代码编译的很好,但是当我试图从vba调用函数时,它导致程序崩溃。请帮我摆脱这个问题,并建立我的dll没有任何错误。

回答

0

MSDN

一个VBA字符串传递BYVAL当作为指针字节字符串BSTR结构将被传递,并作为指针的指针时的ByRef

通过在您的DLL你应该使用BSTR str = SysAllocString(L"Hello World!");分配字符串。 COM内存管理应处理重新分配。

+0

我无法理解 – user14297 2012-07-13 04:57:30

+0

@ user14297传递给函数的字符串的类型不是char char,也不是string string,而是[BSTR](http://msdn.microsoft.com/zh-cn/我们/库/ 1b2d7d2c-47af-4389-a6b6-b01b7e915228(VS.85)) – hansmaad 2012-07-13 10:13:02