2013-03-24 7 views
5

प्रबंधित कोड में स्मृति को आबंटित करने के लिए मैं का उपयोग करें:अप्रबंधित स्मृति में IntPtr [] की सरणी कैसे आवंटित करें?

IntPtr [] params_list_n = new IntPtr [5]; 

लेकिन अप्रबंधित स्मृति के लिए मैं Marshal.AllocHGlobal का उपयोग और मुझे समझ नहीं आता कैसे, इस मामले में सरणी के लिए स्मृति को आबंटित करने।

आदर्श रूप से मैं सरणी के प्रत्येक तत्व के लिए फ़ंक्शन कॉल Marshal.GetNativeVariantForObject (o, params_list_n[i]); का उपयोग करना चाहता हूं।

उत्तर

6

का उपयोग कर Marshal.AllocHGlobal सरल है अप्रबंधित स्मृति बनाना: आप इसे उसी तरह का उपयोग करें।

IntPtr pointer = Marshal.AllocHGlobal(1024); 

आप Marshal.SizeOf उपयोग कर सकते हैं आप अंतरिक्ष की राशि की गणना करने की जरूरत है।

int size = Marshal.SizeOf(typeof(IntPtr)); 
IntPtr pointer = Marshal.AllocHGlobal(size); 

आपको इसे चलाने के लिए अपनी परियोजना में unsafe code को सक्षम करने की आवश्यकता होगी।

  1. अपनी परियोजना पर राइट क्लिक करें और Properties चुनें।
  2. Build टैब खोलें।
  3. Allow unsafe code का चयन करें।
+0

धन्यवाद। मुझे और अधिक बताएं कि स्मृति को अप्रबंधित से अप्रबंधित करने के लिए कैसे कॉपी करें। मार्शल.कोपी इस उद्देश्य के लिए उपयुक्त नहीं है। जैसा मैं समझा हूँ – Mixer

2

सरणी तत्वों के लिए एक सूचक होगा।

IntPtr results = Marshal.AllocHGlobal(5 * IntPtr.Size); 
+1

* आकार * IntPtr के साथ काम नहीं कर रहा है! – Mixer

+1

@Mixer निश्चित - क्षमा करें, तेजी से चला गया –

+1

मैं 'IntPtr.Size' के बारे में भूल गया। कुडोस। :) – eandersson

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