2010-01-29 19 views
7

ptrSentFromPinvokedDLL कैसे मुक्त करें?सी # में IntPtr कैसे मुक्त करें?

IntPtr ptrSentFromPinvokedDLL= IntPtr.Zero; 

int resultFromVendor = CallVendorDll(ref ptrSentFromPinvokedDLL); 

resultFromVendor = DoMoreWorkFromVendorDLL(
    ptrSentFromPinvokedDLL, "workonthis"); 

// Free ptrSentFromPinvokedDLLhere 
+4

ठीक है, विक्रेता * सूचक * आवंटित कैसे किया? संबंधित deallocator का प्रयोग करें। –

+0

आपको लगता है कि आपको इसे मुक्त करने की भी आवश्यकता है। – Michael

उत्तर

9

आदर्श रूप से विक्रेता इस बारे में चिंतित हैं या स्मृति को हटाने के लिए एक विक्रेता कार्य होगा। यदि नहीं, तो आपको यह जानना होगा कि विक्रेता ने स्मृति को कैसे आवंटित किया था। उदाहरण के लिए, यदि विक्रेता LocalAllockernel32.dll में मेमोरी आवंटित करता है तो आप Marshal.FreeHGlobal(IntPtr) का उपयोग करके स्मृति को मुक्त कर सकते हैं। इसी प्रकार, यदि COM मेमोरी आवंटक CoTaskMemAlloc का उपयोग किया गया था तो Marshal.FreeCoTaskMem(IntPtr) स्मृति को मुक्त करने के लिए उपयोग किया जाएगा। तो दस्तावेज़ीकरण की जांच करें और तदनुसार आगे बढ़ें।

संदर्भ के लिए, स्मृति आवंटन मॉडल के बारे में यहां एक अच्छा MSDN article है।

1

यह जानने का कोई तरीका नहीं है कि इसे कैसे मुक्त किया जाए या यदि इसे CallVendorDll के अंदर कोड को देखे बिना भी मुक्त किया जाना चाहिए। (या कुछ दस्तावेज)

संबंधित मुद्दे