Marshaling回调到本机dll

时间:2013-04-11 12:22:35

标签: c#

我正在处理从无人管理的本机库到我的托管C#代码的回调。 回调函数在头文件中声明:

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);

工作正常。

1 个答案:

答案 0 :(得分:5)

您必须使用StringBuilder,因为参数是out参数或返回值。在这些情况下,您无法使用常规string。您使用的编组是正确的。