从非托管代码中释放托管内存分配
本文关键字:内存 分配 释放 非托管代码 | 更新日期: 2023-09-27 18:02:07
我想在托管代码中做Marshal.AllocHGlobal
,用数据填充它,并将该内存块传递给非托管(c++)代码,然后负责释放它。
在引擎盖下,Marshal.AllocHGlobal
调用LocalAlloc
(和,我猜,LocalLock
)。但是为了让非托管代码调用LocalFree,它需要LocalAlloc
返回的HLOCAL, Marshal.AllocHGlobal
不提供。
我不一定局限于使用AllocHGlobal
;高级目标是让托管代码分配内存,然后让非托管代码读取和释放。
这不是句柄,从Windows版本3开始就不是。在指针上调用LocalFree()是可以的,正如Windows SDK文章在其示例中所示。元帅。在这里,AllocCoTaskMem和CoTaskMemFree()是更好的捕鼠器