将代码从C ++包装到C#时的内存管理

时间:2013-11-17 08:12:41

标签: c# c++ memory-management void-pointers wrapping

我正在尝试将C ++代码包装到C#中。 我设法将我的函数导出到DLL,然后从C#中导入它们。

我的问题如下:

在我的C ++代码中,我有一个单例,我使用“createInstance”函数创建。在我导出到DLL的新newCreateInstance函数中,我只调用旧的createInstance,然后返回指向我创建的单例实例的void指针。

在其他功能中,我尝试对单音实例进行操作。所以,我得到一个void指针,然后我将其转换为相关指针,然后尝试对其进行操作。

但是我认为当我从C#调用第二个函数(在调用第一个函数之后)时,我的单例实例已经从内存中删除了。如何将实例保留在堆/堆栈上?它甚至可能或者我应该采用不同的方式吗?

p.s - 我无法在C#上创建相同的类,因为我不知道它的实现(它也来自DLL / LIB文件)。所以我必须使用void指针。

感谢!!!

1 个答案:

答案 0 :(得分:1)

如果您对过早垃圾收集的假设是正确的,则需要将GC.KeepAlive用作explained on MSDN

msdn