C#开发界面,一些数据处理引擎之类的东西使用C++的dll,因为比较成熟所以最好不修改。
现在遇到一个问题:
    打算C#调用C++提供的Init()函数对其进行初始化,同时将C#中的一个callback传递给他,即Init(callback)
    C++中全局变量g_pCallBack记录该callback函数地址,任何需要向界面返回信息的时候就g_pCallBack(info)    实际使用中总是出现C#中的callback总是被GC给回收掉了,实验了很多方法都不行。    主要是C#下给C++的指令可能需要很长时间才能处理完,同时还要能继续操作,所以每次下命令都采用Fun(callback)的方式不可行。有没有什么好方法解决这个问题。我现在想到的是socket通讯传指令和数据。难道C#中托管一点余地都没有么,最好是向dll一次注册callback永久有效。

解决方案 »

  1.   

    定义成静态方法也不可以,必须保证这个delegage是否一个类的静态的成员.
      

  2.   

    定义成静态方法也不可以,必须保证这个delegage是某一个类的静态的成员
      

  3.   

            public static Delegate callback;        public void xxxFunction()
            {
                callback = new XXXXDelegate(xxClass.XXXXFunction);
                Init(callback);
            }
      

  4.   

    public static 委托类型 委托;委托 = 你的函数;
    Init(委托);
      

  5.   

    实际使用中总是出现C#中的callback总是被GC给回收掉了,实验了很多方法都不行。
      

  6.   

    callback定义成静态
    初始化之后,强制GC不回收
    GC.KeepAlive(callback);