2010-01-29 4 views
7

ptrSentFromPinvokedDLL을 해제하는 방법은 무엇입니까?C#에서 IntPtr을 무료로 유지하는 방법?

IntPtr ptrSentFromPinvokedDLL= IntPtr.Zero; 

int resultFromVendor = CallVendorDll(ref ptrSentFromPinvokedDLL); 

resultFromVendor = DoMoreWorkFromVendorDLL(
    ptrSentFromPinvokedDLL, "workonthis"); 

// Free ptrSentFromPinvokedDLLhere 
+4

어떻게 공급 업체가 포인터를 할당 했습니까? 해당 deallocator를 사용하십시오. –

+0

당신은 그것을 풀 필요가 있다고 가정합니다. – Michael

답변

9

이상적으로 공급 업체는 걱정할 필요가 없거나 메모리를 할당 해제하는 공급 업체 기능이 있습니다. 그렇지 않다면 공급 업체가 메모리를 어떻게 할당했는지 알아야합니다. 예를 들어 공급 업체가 LocalAlloc을 사용하여 메모리를 할당 한 경우 Marshal.FreeHGlobal(IntPtr)을 사용하여 메모리를 확보 할 수 있습니다. 마찬가지로 COM 메모리 할당자인 CoTaskMemAlloc이 사용 된 경우 Marshal.FreeCoTaskMem(IntPtr)이 메모리를 확보하는 데 사용됩니다. 그러므로 문서를 확인하고 그에 따라 진행하십시오.

참조 용 메모리 할당 모델에 대해서는 MSDN article을 참조하십시오.

1

코드를 보지 않고도 코드를 해제하는 방법이나 해제해야 할 필요가없는 경우 CallVendorDll 코드를 볼 수 없습니다. (또는 일부 문서)

관련 문제