How can I pass a pointer to an integer in C# -


मेरे हस्ताक्षर के साथ एक सी एपीआई है:

  int GetBuffer (char * बफर, Int * maxSize)  

में, मैं इसे इस तरह से कॉल करूंगा:

  चार बफर [4096]; Int maxSize = 4096; GetBuffer (बफर, और maxSize);  

अधिकतम साइज़ बफर आकार पर सेट है, और वास्तविक आकार भर गया है।

मुझे इसे सी # से कॉल करना है। मैं "सुरक्षित मोड" के अंतर्गत कैसे कर सकता हूं?

एक विकल्प सी # सूचक प्रकार का उपयोग करने के लिए बस है - इसके लिए असुरक्षित ब्लॉक (या विधि / वर्ग पर संशोधक) की आवश्यकता है, और / असुरक्षित :

  [DllImport (...) के साथ संकलन ] स्थिर एक्सटर्न इंटबफर (बाइट * बफर, रेफरी एफ़ अधिकतमसिस);  

बफ़र को कई अलग-अलग तरीकों से आवंटित किया जा सकता है। एक पिन किए गए ढेर सरणी का उपयोग करना होगा:

  तय (बाइट * बफर = नया बाइट [4096]) {int maxSize = buffer.Length; GetBuffer (बफर, रेफरी मैक्ससिज़); }  

एक और स्टैकॉलोक का उपयोग करना है, हालांकि यह केवल छोटे बफ़र्स के लिए संभव है:

  बाइट * बफर = स्टैकॉलॉक बाइट [4096]; Int maxSize = 4096; GetBuffer (बफर, रेफरी मैक्ससिज़);  

यह विशेष रूप से कार्यप्रणाली और आबंटन पैटर्न के संदर्भ में आपके सी कोड के समान है।

एक अन्य विकल्प पूरी तरह से ढेर सरणियों के लिए मार्शलिंग का उपयोग करना है, और पॉइंटर्स पूरी तरह से।

  [DllImport (...)] स्थिर extern गेटबफर ([बाहर] बाइट [] बफर, रेफरी int maxSize); बाइट [] बफर = नया बाइट [4096]; Int maxSize = बफर। लांघ; GetBuffer (बफर, रेफरी मैक्ससिज़);  

Comments

Popular posts from this blog

asp.net - Javascript/DOM Why is does my form not support submit()? -

sockets - Delphi: TTcpServer, connection reset when reading -

javascript - Classic ASP "ExecuteGlobal" statement acting differently on two servers -