2013-01-08 34 views
5

में इंट्राट्रेट int * के लिए मैं सी ++/सीएलआई इंटरऑप परत का उपयोग कर एक सी # अनुप्रयोग से मौजूदा सी ++ लाइब्रेरी को कॉल करने का प्रयास कर रहा हूं।सिस्टम :: सी ++/सीएलआई

void doSomething(int* foo, int size); 

और एक सी # उद्देश्य यह है कि दो क्षेत्रों, एक IntPtr शुरू रखती है, और किसी पूर्णांक आकार: मैं एक सी ++ समारोह है कि कुछ इस तरह दिखता है। मैं एक प्रबंधित सी ++ वर्ग कि इस तरह दिखता है लिखा है:

public ref class Wrapper { 
public: 
    void run(System::IntPtr itn, int size); 
}; 

और अब मैं आवरण :: समय में DoSomething कॉल करना चाहते हैं, और DoSomething कि सी # वस्तु अंक के लिए डेटा के एक ही ब्लॉक के लिए उपयोग किया है। क्या मैं एक प्रतिलिपि के बिना संभव करने की कोशिश कर रहा हूं, और यदि हां, तो कैसे?

+0

निश्चित रूप से आप को लिखने के लिए मतलब था कि 'के रूप में शून्य रन (पूर्णांक% ITN, पूर्णांक आकार) '? यदि नहीं तो स्मृति को किसी के द्वारा पिन किया जाना चाहिए। ** ** ** उस आवश्यकता को अनदेखा न करें, इसे C++/CLI में पिन_ptr <> के साथ करने के लिए सबसे अच्छा है <इसलिए सी # कोड int int [] का उपयोग कर सकता है। –

+0

क्षमा करें, मैं सीएलआई और सी # के लिए नया हूं, मैं ज्यादातर सी ++ और सी से परिचित हूं। स्मृति को पिन करने से क्या होता है? –

उत्तर

3

आवरण :: रन से DoSomething फोन करने के लिए, System::IntPtr::ToPointer की वापसी कास्टिंग की कोशिश तो की तरह:

doSomething(reinterpret_cast<int*>(itn.ToPointer()), size);