C#中调用C++的DLL函数,debug可以,release出错

一无所有自知之明 2011-09-20 11:36:00
如下所示,c#中调用c++的函数,函数的一个参数为 函数指针,即回调函数,用delegate。debug下可以,但是release出错。
说:**指令引用的**内存,该内存不能为read
在网上搜了一下,说 因为delegate委托一会自己就释放了,而我的函数里却一直在用他,放在很多个线程里用它
请问,怎么解决?
public delegate void CallBack(IntPtr a);
namespace DLLThreadPool
{


class Program
{

[DllImport("DLLDemo.dll", CharSet = CharSet.Auto)]
public static extern Int32 funcThreadPool(Int32 nPoolJobList, Int32 nPoolJobNum, Int32 nPoolThreadNum, CallBack cBack);

public static void fun_type1(IntPtr iPtr)
{
Thread.Sleep(50);
return ;
}
public static void Main(string[] args)
{
CallBack cb=new CallBack(Program.fun_type1);
int i = funcThreadPool(1000, 10000, 500, cb);
}
}
}
...全文
292 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
也不行,我sleep(10000),我查了下说是delegate 会自动销毁?
[Quote=引用 2 楼 ghost5216 的回复:]

Main退出了吧

你别让他退出 看看

main末尾加
while(true)
{
Thread.Sleep(1000);

}
[/Quote]
ghost5216 2011-09-20
  • 打赏
  • 举报
回复
Main退出了吧

你别让他退出 看看

main末尾加
while(true)
{
Thread.Sleep(1000);

}
  • 打赏
  • 举报
回复
会者来帮忙看看啊
sdl2005lyx 2011-09-20
  • 打赏
  • 举报
回复
"采用一样的方法,最后查出在执行一句的时候出错,而那句话是我们公司内部的库,晕……",楼主,编程有时候就是这样,经验多了,就很容易找到出错的地方。。。
  • 打赏
  • 举报
回复
是的,我把dll,lib都复制过去了,复制的也是release对应版的。就是不行
后来,我把那个被调函数注释了,然后一点点的取消注释,遇到函数再进入函数内,采用一样的方法,最后查出在执行一句的时候出错,而那句话是我们公司内部的库,晕……
唉……
[Quote=引用 4 楼 sdl2005lyx 的回复:]

这个问题,有点怪异!”debug可以,release出错“,楼主,你在release的目录下,是否DLLDemo.dll也是release版本的,当然,还有它依赖的其他动态库。。。
[/Quote]
sdl2005lyx 2011-09-20
  • 打赏
  • 举报
回复
这个问题,有点怪异!”debug可以,release出错“,楼主,你在release的目录下,是否DLLDemo.dll也是release版本的,当然,还有它依赖的其他动态库。。。

111,094

社区成员

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

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

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