我正在处理从无人管理的本机库到我的托管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);
工作正常。
答案 0 :(得分:5)
您必须使用StringBuilder
,因为参数是out
参数或返回值。在这些情况下,您无法使用常规string
。您使用的编组是正确的。