回调参数是const char*,回调老是异常,怎么办?
我在一个C++ dll中定义了一个回调机制,如下
typedef void (*InfoReceiverCallBack)(const char* pInfo);
InfoReceiverCallBack lpInfoCallback = NULL;
HRESULT RegisterInfoReceiveCallBack(InfoReceiverCallBack callBack)
{
lpInfoCallback = callBack;
return S_OK;
}
//其他函数调用
void TraceInfo(const char* c)
{
TRACE(c);
if(lpInfoCallback != NULL)
{
lpInfoCallBack(c);
}
}
在C#中定义如下:
public delegate void InfoReceiveDelegate(
string info);
[DllImport("XXX.dll", CallingConvention = CallingConvention .Cdecl)]
public static extern int RegisterInfoReceiveCallBack(
InfoReceiveDelegate infoReceiver);
然后有一个显示函数:
void Output(string info)
{
//XXXXXXXXX
}
每次设置断点后信息正常,但是跳出函数时出现如下错误:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call, This is usually a result of calling a function declared with one calling conversion with a function pointer declared with a different calling convertion.
我的C++类库是用_Cdecl调用约定,改为_Stdcall编译不过去,因为有一个第三方的lib.
我写了一个C++测试程序,是没有问题的。
到底是什么问题??
请指教,多谢多谢