如何释放 ptrSentFromPinvokedDLL?
IntPtr ptrSentFromPinvokedDLL= IntPtr.Zero;
int resultFromVendor = CallVendorDll(ref ptrSentFromPinvokedDLL);
resultFromVendor = DoMoreWorkFromVendorDLL(
ptrSentFromPinvokedDLL, "workonthis");
// Free ptrSentFromPinvokedDLLhere
最佳答案
理想情况下,供应商会担心这一点,或者会有一个供应商函数来释放内存。如果不是,您需要知道供应商是如何分配内存的。例如,如果供应商使用 LocalAlloc
分配内存在 kernel32.dll
中,您可以使用 Marshal.FreeHGlobal(IntPtr)
释放内存.同样,如果 COM 内存分配器 CoTaskMemAlloc
当时用过Marshal.FreeCoTaskMem(IntPtr)
将用于释放内存。因此,请检查文档并相应地进行。
作为引用,这里有一个不错的 MSDN article关于内存分配模型。
关于c# - 如何在 C# 中释放 IntPtr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159150/