对本机dll的封送回调
本文关键字:回调 本机 dll | 更新日期: 2023-09-27 18:08:52
我正在使用回调从非托管本机库到我的托管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);
没问题。
必须使用StringBuilder
,因为参数是out
参数或返回值。在这些情况下,你不能使用常规的string
。您使用的封送是正确的。