我正在处理从非托管本机库到托管 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);
工作正常。