C # से C ++ कोड को कॉल करना संभव है?


86

क्या C ++ कोड को कॉल करना संभव है, संभवतः एक .NET लायब्रेरी फ़ाइल (.dll) के रूप में संकलित किया जाता है। C # जैसे .NET भाषा में?

विशेष रूप से, C ++ कोड जैसे कि RakNet नेटवर्किंग लाइब्रेरी।


अनमैंगेड c ++ को mangaged c #: c-sharpcorner.com/uploadfile/tanmayit08/…
टायलर एस। लोपर

जवाबों:


90

C ++ में कॉल करने का एक आसान तरीका C ++ / CLI में रैपर असेंबली बनाना है। C ++ / CLI में आप मानवरहित कोड में कॉल कर सकते हैं जैसे कि आप मूल कोड लिख रहे थे, लेकिन आप C ++ / CI कोड से C # में कॉल कर सकते हैं जैसे कि यह C # में लिखा गया था। भाषा को मूल रूप से मौजूदा पुस्तकालयों में अपने "किलर ऐप" के रूप में डिजाइन किया गया था।

उदाहरण के लिए - इसे / clr स्विच के साथ संकलित करें

#include "NativeType.h"

public ref class ManagedType
{
     NativeType*   NativePtr; 

public:
     ManagedType() : NativePtr(new NativeType()) {}
     ~ManagedType() { delete NativePtr; }

     void ManagedMethod()
      { NativePtr->NativeMethod(); } 
}; 

फिर C # में, अपने ManagedType असेंबली में एक संदर्भ जोड़ें, और इसे इस तरह उपयोग करें:

ManagedType mt = new ManagedType();
mt.ManagedMethod();

की जाँच करें इस ब्लॉग पोस्ट में एक और अधिक विस्तार से बताया उदाहरण के लिए।


2
लिंक ब्लॉग पोस्ट के लिए टूट गया है :(
विदर

9

मैं आपके द्वारा बताए गए पुस्तकालय से परिचित नहीं हूं, लेकिन सामान्य तौर पर ऐसा करने के लिए कुछ तरीके हैं:

  • पी / निर्यात पुस्तकालय कार्यों के लिए आह्वान
  • COM प्रकार लायब्रेरी का संदर्भ जोड़ना (यदि आप COM ऑब्जेक्ट्स के साथ काम कर रहे हैं)।

9

P / Invoke एक अच्छी तकनीक है, और यह लक्ष्य DLL फ़ाइल को लोड करने के मुद्दों को छोड़कर, काफी अच्छी तरह से काम करता है। हमने पाया है कि चीजों को करने का सबसे अच्छा तरीका देशी कार्यों का एक स्थिर पुस्तकालय बनाना है और इसे प्रबंधित सी ++ (या सी ++ / सीएलआई) परियोजना में जोड़ना है जो इस पर निर्भर करता है।


मेरे पास कॉलबैक और पी / इनवोक के मुद्दे हैं। C ++ / CLI पर स्विच करने से इन समस्याओं का समाधान हुआ है।
MedicineMan


2

वाकई है। यह लेख इस पर आरंभ करने के लिए आपके द्वारा किए जा सकने वाले किसी चीज़ का एक अच्छा उदाहरण है।

हम P / Invoke का उपयोग करके अपने विंडोज मोबाइल उपकरणों पर C # से ऐसा करते हैं ।


2

ऐसा करने के लिए इस्तेमाल की जाने वाली तकनीक को पी / इनवोक कहा जाता है ; आप इस विषय पर लेख खोज सकते हैं। ध्यान दें कि यह C # से C को कॉल करने के लिए है, C ++ से इतना अधिक नहीं है। तो आपको अपने C ++ कोड को C आवरण में लपेटना होगा जो कि आपका DLL निर्यात करता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.