问题描述
我的项目中有很多 IntPtr,其中一些是从我的 dll 返回的,因此,我没有使用 Marshal.AllocHGlobal()
[DllImport(Dll,CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr CreatePart(IntPtr partId);
我应该如何释放从 dll 函数返回的这些 IntPtrs?
Marshal.FreeHGlobal()
或 variable = IntPtr.Zero
或两者?
我在本网站和 Microsoft 文档上阅读了一些问题,他们说 Marshal.FreeHGlobal
应该用于使用 Marshal.AllocHGlobal
分配的任何内存。
如果我们没有为 IntPtr
感谢您阅读我的问题。
解决方法
我应该如何释放从 dll 函数返回的这些 IntPtrs?
这取决于 CreatePart
的本机实现,但通常通过将返回的指针传递给另一个名为 DestroyPart
的本机方法或在您完成后的其他内容。
能否真正使用Marshal.FreeHGlobal
来释放内存取决于分配内存的native方法的实现。释放内存的方式必须与分配内存的方式相匹配。
IntPtr
本身只是一个值类型: