gpt4 book ai didi

.net - 如何释放由 P/Invoked C 函数分配的缓冲区?

转载 作者:行者123 更新时间:2023-12-01 12:59:50 24 4
gpt4 key购买 nike

C 库是用 MinGW 编译的,导出的函数返回一个 malloc() 的缓冲区。调用者有责任释放()此缓冲区。

Marshal.FreeCoTaskMem 是否与 malloc 兼容?

是否可以通过某种方式 P/Invoke free()?

最佳答案

如果导出使用 malloc 分配的内存,则需要在与 malloc 相同的运行时使用 free 释放它。您可以从 DLL 中免费导出,但这可能不是最优雅的解决方案。

Marshal.FreeCoTaskMem 用于COM分配的内存。因此,您可以在托管代码中使用它来释放由对 CoTaskMemAlloc 的非托管调用分配的内存。这是解决您的问题的好方法。

另一个答案建议使用 Marshal.FreeHGlobal 释放内存,只要它是使用 LocalAlloc 分配的,它就可以工作。这是一个使用起来相当烦人的 API,为了方便起见,我总是更喜欢 COM 分配器。

如果要导出字符串,请考虑使用 BSTR,它由 COM 分配器分配并且可以由 .net 编码器自动编码。

关于.net - 如何释放由 P/Invoked C 函数分配的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com