【问题标题】:Free managed memory allocation from unmanaged code从非托管代码中释放托管内存分配
【发布时间】:2011-07-13 00:23:07
【问题描述】:

我想在托管代码中执行 Marshal.AllocHGlobal,用数据填充它,然后将该内存块传递给非托管 (C++) 代码,然后由该代码负责释放它。

在后台,Marshal.AllocHGlobal 调用LocalAlloc(我猜是LocalLock)。但是为了让非托管代码调用 LocalFree,它需要 LocalAlloc 返回的 HLOCAL,而 Marshal.AllocHGlobal 不提供。

我不一定限于使用AllocHGlobal;高级目标是让托管代码分配非托管代码然后读取和释放的内存。

【问题讨论】:

    标签: c# interop unmanaged managed


    【解决方案1】:

    这不是句柄,从 Windows 版本 3 开始就没有。在指针上调用 LocalFree() 很好,正如 Windows SDK article 在其示例中所示。 Marshal.AllocCoTaskMem 和 CoTaskMemFree() 是更好的捕鼠器。

    【讨论】:

    • 啊,是的。 Marshal.AllocHGlobal 使用 LMEM_FIXED 分配,它返回一个直接指针。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2011-10-30
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多