调用C++dll,需要传入一个函数指针,函数参数含有数组指针,用于传回数据,怎么老说我访问内存非法呀.

heartthrob 2008-09-11 03:41:49
C++ dll代码

回掉函数类型: void callback(BYTE *data,int nlen)

//DLL 设置回调函数
void SetCallBackFunc(CALL_BACK_FUNC callback)
{
m_callback = callback;
}

//dll 调用回掉函数向C#传回数据
void StartDll()
{
BYTE btData[100];
for(byte i = 0 ;i < 100;i++)
{
btData[i] = i;
}
m_callback(btData,100); //将数据通过回掉函数传回C#,此处出错.
}

/////////////////////////
//C#代码

//声明委托函数,引入dll代码
//
///


public static void startCsharp()
{
SetCallBackFunc(GetData);
}

public static void GetData(BYTE []btData,int len)
{
//处理data数组
}


现在的问题是,每次dll里面一掉用回掉函数,向C#代码传入数据时,C#能处理数据,但一返回dll,就崩溃了,内存错误.请问各位老大有谁碰到过这个问题?
有兴趣的朋友可以自己写个简单的代码试验一下.dll用C++写,回调函数参数有指针用于传送数据的.

...全文
561 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Career2011 2012-04-08
  • 打赏
  • 举报
回复
看帖子的时间是2008年的,现在都2012了。。我又遇到前辈曾经的问题了。。。正在纠结中!

调试了好长时间,发现确实是这样的,回调后发生后进入C#中的代码是正常运行的,返回C++后,貌似就有点乱了,,if语句的两个分支中断点居然都命中!,C++函数返回后,立刻就提示缓冲区溢出!!

问题不好解决啊,估计是dll中的函数调用约定和C#委托的调用约定不一样?!
heartthrob 2008-09-11
  • 打赏
  • 举报
回复
晕,没有一个人帮忙的?我是做c++出身的,对C#不是很熟。麻烦大家帮忙啊兄弟们。

111,090

社区成员

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

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

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