如何在C#中释放IntPtr?

47d*_*7d_ 9 c# pinvoke interop

如何释放ptrSentFromPinvokedDLL?

IntPtr ptrSentFromPinvokedDLL= IntPtr.Zero;

int resultFromVendor = CallVendorDll(ref ptrSentFromPinvokedDLL);

resultFromVendor = DoMoreWorkFromVendorDLL(
    ptrSentFromPinvokedDLL, "workonthis");

// Free ptrSentFromPinvokedDLLhere
Run Code Online (Sandbox Code Playgroud)

jas*_*son 10

理想情况下,供应商担心这一点,或者会有供应商功能来解除内存.如果没有,您需要知道供应商如何分配内存.例如,如果供应商使用LocalAllocin 分配内存,kernel32.dll则可以使用释放内存Marshal.FreeHGlobal(IntPtr).类似地,如果使用COM内存分配器CoTaskMemAlloc,那么Marshal.FreeCoTaskMem(IntPtr)将用于释放内存.因此,请检查文档并相应地继续.

作为参考,这是一篇关于内存分配模型的MSDN文章.