我为C++库创建了一个C包装,我从C#托管代码中调用了这个C包装。我面临的问题是这个库涉及数千次迭代和长时间运行。很明显,我需要一种与C#程序进行通信的方式,并更新C/C++库正在处理的状态。使用P/Invoke在托管代码和非托管代码之间共享内存
直接方法将在固定次数的迭代后返回,更新状态并再次调用C/C++包装器。但是处理依赖于一些基于C++ STL的数据结构,这些数据结构在每次迭代后都会更新。我不需要托管代码上的这些数据结构,但显然它们必须在所有迭代中保留在内存中。
所以我不能从C返回/ C++包装,直至处理完毕,否则C++结构将被释放......
我想将共享托管和非托管代码之间的一些变量的最佳方法,并每N次迭代读取处理状态。但是这会导致另一个问题:我如何同步对这个内存的访问?
为什么数据结构在包装返回时会被解除分配? – Blorgbeard 2014-11-02 22:34:36
因为它们是由被调用函数分配的。使用全局变量或未释放的动态内存似乎是一个肮脏而不稳定的解决方案我可以确定这个动态内存或全局变量在调用封装后不会被清除吗?如果DLL被卸载会怎么样? – sapito 2014-11-02 22:45:08