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永久有效。
现在遇到一个问题:
打算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永久有效。
{
callback = new XXXXDelegate(xxClass.XXXXFunction);
Init(callback);
}
Init(委托);
初始化之后,强制GC不回收
GC.KeepAlive(callback);