回调参数是const char*,回调老是异常,怎么办?

littlefellow 2006-01-08 10:14:19
我在一个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++测试程序,是没有问题的。
到底是什么问题??
请指教,多谢多谢
...全文
122 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JasonHeung 2006-01-09
  • 打赏
  • 举报
回复
typedef void ( WINAPI *InfoReceiverCallBack)(const char* pInfo);
littlefellow 2006-01-09
  • 打赏
  • 举报
回复
一语惊醒我梦中人那,谢谢
littlefellow 2006-01-08
  • 打赏
  • 举报
回复
急急如率令

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧