首页 > 代码库 > c#调用c++dll库调用约定问题
c#调用c++dll库调用约定问题
DEBUG 错误现象提醒
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 convention with a function pointer declared with a different calling convention
release版本 应用程序直接消失,什么信息都没有。
c#和c++ 都是明确定义了 __stdcall为函数调用约定,但debug版本调试还是提示上述现象,大意就是回调函数的调用约定不一致。
经排查其实不是调用约定不一致,而是回调函数的参数不一致,造成回调函数释放栈内存是异常。
c++dll库中 回调函数定义 typedef void (CALLBACK *pRHMessageCallBack)(int iVK_Value, int iFlag, void* pUserData);
c#中应该这样定义才正确:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void pRHMessageCallBack(int iVK_Value, int iFlag, IntPtr userData);
而不能定义成
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void pRHMessageCallBack(int iVK_Value, int iFlag, object userData);
c#调用c++dll库调用约定问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。