从非托管代码免费管理内存分配

时间:2011-07-13 00:23:08

标签: c# interop unmanaged managed

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

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

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

1 个答案:

答案 0 :(得分:0)

这不是一个句柄,不是自Windows版本3.在指针上调用LocalFree()就好了,正如Windows SDK article在其示例中所示。 Marshal.AllocCoTaskMem和CoTaskMemFree()是更好的鼠标陷阱。