2013-04-11 63 views
2

我正在使用從unmanged本地庫到我的託管C#代碼的回調。 回調函數是在頭文件中聲明:對原生dll的封鎖回調

typedef void* (TNotice)(wchar_t *msg, bool error); 

回調字符串參數msg.I不KHOW,爲什麼不C#中工作的聲明:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)] 
public delegate IntPtr CallbackDelegate([MarshalAs(UnmanagedType.LPWStr)]string msg, bool error); 

但是聲明:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)] 
public delegate IntPtr CallbackDelegate([MarshalAs(UnmanagedType.LPWStr)]StringBuilder msg, bool error); 

工作正常。

+0

對我來說,語法看起來正確。除了...在C#中,你說你的函數返回一些指針,而在C++聲明中返回'void'。這不應該是問題,但誰知道。請說明你有什麼樣的行爲 - 什麼手段「不起作用」。 – Zoka 2013-04-11 12:29:43

回答

5

您必須使用StringBuilder,因爲參數是out參數或返回值。在這些情況下,您不能使用常規的string。你使用的編組是正確的。

+0

感謝您的解釋。 – misak 2013-04-11 12:37:32

+0

不客氣! – 2013-04-11 12:46:19

+0

它應該仍然是字符串生成器,如果在結構中使用? – paulm 2013-06-11 08:21:40