2012-07-12 96 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