从非托管代码中释放托管内存分配

发布于 2024-11-19 21:26:03 字数 366 浏览 2 评论 0原文

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

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

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

I'd like to do Marshal.AllocHGlobal in managed code, fill it with data, and pass that memory block to unmanaged (C++) code that will then be responsible for freeing it.

Under the hood, Marshal.AllocHGlobal calls LocalAlloc (and, I'm guessing, LocalLock). But in order for the unmanaged code to call LocalFree, it needs the HLOCAL returned by LocalAlloc, which Marshal.AllocHGlobal doesn't provide.

I'm not necessarily restricted to using AllocHGlobal; the high level goal is to let the managed code allocate memory that the unmanaged code and then read and free.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

黒涩兲箜 2024-11-26 21:26:03

这不是一个句柄,从 Windows 版本 3 开始就不是了。在指针上调用 LocalFree() 是可以的,因为 Windows SDK 文章 在其示例中显示。 Marshal.AllocCoTaskMem 和 CoTaskMemFree() 是这里更好的鼠标陷阱。

This is not a handle, not since Windows version 3. Calling LocalFree() on the pointer is fine, as the Windows SDK article shows in its example. Marshal.AllocCoTaskMem and CoTaskMemFree() are the better mouse trap here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文