【问题标题】:Memory management when wrapping code from C++ to C#将代码从 C++ 包装到 C# 时的内存管理
【发布时间】:2013-11-30 11:20:21
【问题描述】:

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

我的问题如下:

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

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

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

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

谢谢!!!

【问题讨论】:

  • 贴一些你在说什么的代码,这样我们就可以判断它是否会内存不足

标签: c# c++ memory-management void-pointers word-wrap


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2014-10-24
    • 2010-09-06
    • 2018-12-17
    相关资源
    最近更新 更多