问题描述
C++dll代码回掉函数类型:voidcallback(BYTE*data,intnlen)//DLL设置回调函数voidSetCallBackFunc(CALL_BACK_FUNCcallback){m_callback=callback;}//dll调用回掉函数向C#传回数据voidStartDll(){BYTEbtData[100];for(bytei=0;i<100;i++){btData[i]=i;}m_callback(btData,100);//将数据通过回掉函数传回C#,此处出错.}///////////////////////////C#代码//声明委托函数,引入dll代码/////publicstaticvoidstartCsharp(){SetCallBackFunc(GetData);}publicstaticvoidGetData(BYTE[]btData,intlen){//处理data数组}现在的问题是,每次dll里面一掉用回掉函数,向C#代码传入数据时,C#能处理数据,但一返回dll,就崩溃了,内存错误.请问各位老大有谁碰到过这个问题?有兴趣的朋友可以自己写个简单的代码试验一下.dll用C++写,回调函数参数有指针用于传送数据的.
解决方案
解决方案二:
晕,没有一个人帮忙的?我是做c++出身的,对C#不是很熟。麻烦大家帮忙啊兄弟们。
解决方案三:
看帖子的时间是2008年的,现在都2012了。。我又遇到前辈曾经的问题了。。。正在纠结中!调试了好长时间,发现确实是这样的,回调后发生后进入C#中的代码是正常运行的,返回C++后,貌似就有点乱了,,if语句的两个分支中断点居然都命中!,C++函数返回后,立刻就提示缓冲区溢出!!问题不好解决啊,估计是dll中的函数调用约定和C#委托的调用约定不一样?!