2012-06-19 12 views
5

को मैं C++ void someFunc(char* arg1, int* arg2) एक समारोह जो मैं मापदंडों मार्शल करने के लिए के रूप में मैं (DLL आयात करने के बाद) सी # में इस समारोह का उपयोग करना चाहते है ..मार्शलिंग पूर्णांक * सी #

आप कृपया मुझे बताओ कि मैं चाहिए मार्शल के रूप में मैं यहाँ उलझन में हूँ।

[DllImport(Dllname)] 
extern void someFunc([MarshallAsAttribute(UnmanagedType,LPStr)] string arg1, IntPtr arg2); 

क्या मुझे यहां एक इंटीपीआरटी का उपयोग करना चाहिए? मैं सी # से किसी भी इंट चर के पते को पार नहीं कर सकता ताकि यह सी ++ में सूचक में उतरे?

+0

असुरक्षित कोड ब्लॉक का उपयोग करके आप वास्तव में सी # में देशी पॉइंटर्स का उपयोग कर सकते हैं। हालांकि मैं इसकी अनुशंसा नहीं करता, क्योंकि यह एक अनजान एपीआई की ओर जाता है। –

+1

आपको उन पॉइंटर्स के अर्थ का वर्णन करने की आवश्यकता होगी। विशेष रूप से वे कितना डेटा इंगित करते हैं, यदि फ़ंक्शन पॉइंटर्स को लौटने के बाद रखता है, और यदि आप उन्हें 'शून्य' पास करना चाहते हैं। – CodesInChaos

उत्तर

7

समस्या int* सी में कई अलग-अलग परिदृश्यों के लिए उपयोग की जा सकती है। आप कैसे मार्शल यह दर्शाते हैं कि int* arg2 का प्रतिनिधित्व करने के लिए क्या मतलब है।

उदाहरण के लिए, यदि यह सिर्फ एक int का मान निर्धारित कर रहा है, तो आप इसे ref int के रूप में मार्शल कर सकते हैं। हालांकि, यदि int* एक सरणी का प्रतिनिधित्व कर रहा है, तो आप एक सरणी पारित करना चाहेंगे (हालांकि यह संभावना नहीं है, क्योंकि कोई लंबाई अवधि नहीं है, जो एक सूचक के माध्यम से सरणी का उपयोग करते समय आम है)।

+0

और एक 'चार *' और भी अस्पष्ट है। – CodesInChaos

+0

@CodeInChaos हां - किसी भी सूचक प्रकार में यह समस्या है। आपको हमेशा यह जानने की जरूरत है कि मूल चर इस चर के साथ क्या करने की योजना बना रहा है। –

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