如下所示,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);           
        }
    }
}

解决方案 »

  1.   

    Main退出了吧你别让他退出 看看main末尾加
    while(true)
    {
       Thread.Sleep(1000);}
      

  2.   

    也不行,我sleep(10000),我查了下说是delegate 会自动销毁?
      

  3.   

    这个问题,有点怪异!”debug可以,release出错“,楼主,你在release的目录下,是否DLLDemo.dll也是release版本的,当然,还有它依赖的其他动态库
      

  4.   

    是的,我把dll,lib都复制过去了,复制的也是release对应版的。就是不行
    后来,我把那个被调函数注释了,然后一点点的取消注释,遇到函数再进入函数内,采用一样的方法,最后查出在执行一句的时候出错,而那句话是我们公司内部的库,晕……
    唉……