2010-04-14 11 views
35

मेरे पास एक सी ++ प्रोजेक्ट है। मैं मानता हूं कि मैं सी ++ में एक पूर्ण शून्य हूं। लेकिन फिर भी मुझे एक सी ++ लिखना होगा। नेट रैपर ताकि मैं इसका उपयोग कर एक अप्रबंधित सी ++ लाइब्रेरी के साथ काम कर सकूं। तो मेरे पास क्या है: 1) अप्रबंधित प्रोजेक्ट की हेडर फाइलें। 2) अप्रबंधित परियोजना के पुस्तकालयों (.dll के और उदारीकरण के) 3) एक खाली सी ++। नेट परियोजना जो मैं अपने ग # आवेदनसरल सी ++। नेट रैपर बनाना। चरण-दर-चरण

के लिए एक आवरण के रूप में उपयोग करने की योजना मैं कैसे शुरू कर सकते हैं? मैं यह भी नहीं जानता कि एक अप्रबंधित लाइब्रेरी का संदर्भ कैसे सेट करें।

एसओएस

+13

+1 जैसा कि मैं बिल्कुल एक ही स्थिति में हूं, हताश और अनजान के रूप में ध्वनि के लिए +1 :) –

उत्तर

35

http://www.codeproject.com/KB/mcpp/quickcppcli.aspx#A8

यह सामान्य दिशा है। आपको सी ++/सीएलआई क्लास लाइब्रेरी प्रोजेक्ट बनाने की ज़रूरत है, इसमें .NET क्लास जोड़ें (इस नमूने में स्टूडेंटवापर), प्रबंधित क्लास सदस्य के रूप में अप्रबंधित क्लास इंस्टेंस बनाएं, और प्रत्येक अप्रबंधित क्लास फ़ंक्शन को लपेटें। अप्रबंधित लाइब्रेरी को लिंकर निर्भरता सूची का उपयोग करके सी ++/सीएलआई प्रोजेक्ट में जोड़ा गया है, न कि संदर्भ के रूप में। प्रोजेक्ट में - गुण - लिंकर अतिरिक्त निर्भरता खोलें और वहां .lib नाम जोड़ें।

नोट: चूंकि हम सी ++/सीएलआई रैपर के बारे में बात कर रहे हैं, कोई PInvoke नहीं! PInvoke का उपयोग निर्यात किए गए कार्यों (एपीआई) को कॉल करने के लिए किया जाता है, न कि कक्षाएं।

+5

सी ++/सीएलआई के रूप में टूटा हुआ प्रतीत होता है वास्तव में पी/Invoke है, इसलिए यह अभी भी पी/Invoke है। http://msdn.microsoft.com/en-us/library/2x8kf7zx.aspx, आप सी ++ कक्षाओं को कॉल करने के लिए पी/इनवॉक का भी उपयोग कर सकते हैं, बस कुछ अतिरिक्त काम करने की आवश्यकता है। – xInterop

+0

[कोडप्रोजेक्ट (लिंक)] पर एक और महान लेख [http://www.codeproject.com/Articles/651516/Exposing-native-to-managed-Cplusplus-CLI-vs-P-Invo)। पी/Invoke और सी ++/सीएलआई दोनों का वर्णन करता है। शमुएल ज़ांग को क्रेडिट। –

8

आपको अपने अप्रबंधित DLL से बात करने के लिए .NET से p/invoke का उपयोग करने की आवश्यकता है।

अनिवार्य रूप से आप अपने अप्रबंधित DLL में कॉल करने के लिए प्रत्येक फ़ंक्शन के लिए फ़ंक्शन हेडर बनाते हैं, और .NET बताते हैं कि डीएलएल फ़ंक्शन में रहता है, तो बस उस फ़ंक्शन को अपने .NET wrapper में किसी अन्य की तरह कॉल करें।

आपको किसी भी सी ++ ज्ञान की भी आवश्यकता नहीं होनी चाहिए - जब तक आप अपने अप्रबंधित डीएलएल और सही डेटाटाइप में कार्यों की फ़ंक्शन परिभाषा को जानते हों।

+1

यह लिंक आज – qbolec

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