2

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

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

回调有字符串参数 msg。我不知道,为什么在 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);

工作正常。

4

1 回答 1

5

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

于 2013-04-11T12:31:05.720 回答