C# 回调 C++函数
Kiven 2013-12-09 12:51:53 最近遇到一个非常棘手的问题,都到最后一步了,还出错,请高手指点
我想用C++写底层,C#写界面。采用C#调用C++函数,有些网络事件需要回调处理,所以用了C++的函数指针和C#的委托。我的程序能够调用完成,但是就是最后的时候崩掉了,我查看堆栈程序停在C++函数的末尾,应该是函数调用结束出栈报错。提示Run-Time Check Failure #0。网上看了很多资料,说的是C++导出和C#调入约定不一致,问题是我设置的肯定是一至的啊。下面是程序的相关代码,往高人指点,感激不尽!
C++代码
#ifndef STRUCTMOD_EXPORT
#define STRUCTMOD_EXPORT extern "C" __declspec(dllexport)
#endif
typedef void (*PFunTest)(INT32 iN);
STRUCTMOD_EXPORT void __stdcall CallerDll(PFunTest pfnTest);
void __stdcall CallerDll(PFunTest pfnTest)
{
if (pfnTest)
{
(*pfnTest)(10);
}
//就在这里,函数出栈时出错了!
}
C#代码
public delegate void TestD(Int32 iN);
public static TestD t;
[DllImport("CDll", EntryPoint = "CallerDll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
private static extern void CallerDll(TestD t);
private void button1_Click(object sender, EventArgs e)
{
t = new TestD(Test);
CallerDll(t);
}
public void Test(Int32 iN)
{
MessageBox.Show(iN.ToString());//显示没有问题 弹出对话框 显示 10
}