如何释放ptrSentFromPinvokedDLL?
IntPtr ptrSentFromPinvokedDLL= IntPtr.Zero;
int resultFromVendor = CallVendorDll(ref ptrSentFromPinvokedDLL);
resultFromVendor = DoMoreWorkFromVendorDLL(
ptrSentFromPinvokedDLL, "workonthis");
// Free ptrSentFromPinvokedDLLhere
答案 0 :(得分:10)
理想情况下,供应商要么担心这个问题,要么就会有供应商解除内存的功能。如果没有,您需要知道供应商如何分配内存。例如,如果供应商使用kernel32.dll
中的LocalAlloc
分配了内存,那么您可以使用Marshal.FreeHGlobal(IntPtr)
释放内存。同样,如果使用COM内存分配器CoTaskMemAlloc
,那么Marshal.FreeCoTaskMem(IntPtr)
将用于释放内存。因此,请检查文档并相应地继续。
作为参考,这是关于内存分配模型的一个很好的MSDN article。
答案 1 :(得分:1)
没有办法知道如何释放它,或者甚至需要在没有看到CallVendorDll
内的代码的情况下释放它。 (或一些文件)