क्या C ++ कोड को कॉल करना संभव है, संभवतः एक .NET लायब्रेरी फ़ाइल (.dll) के रूप में संकलित किया जाता है। C # जैसे .NET भाषा में?
विशेष रूप से, C ++ कोड जैसे कि RakNet नेटवर्किंग लाइब्रेरी।
क्या C ++ कोड को कॉल करना संभव है, संभवतः एक .NET लायब्रेरी फ़ाइल (.dll) के रूप में संकलित किया जाता है। C # जैसे .NET भाषा में?
विशेष रूप से, C ++ कोड जैसे कि RakNet नेटवर्किंग लाइब्रेरी।
जवाबों:
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();
की जाँच करें इस ब्लॉग पोस्ट में एक और अधिक विस्तार से बताया उदाहरण के लिए।
P / Invoke एक अच्छी तकनीक है, और यह लक्ष्य DLL फ़ाइल को लोड करने के मुद्दों को छोड़कर, काफी अच्छी तरह से काम करता है। हमने पाया है कि चीजों को करने का सबसे अच्छा तरीका देशी कार्यों का एक स्थिर पुस्तकालय बनाना है और इसे प्रबंधित सी ++ (या सी ++ / सीएलआई) परियोजना में जोड़ना है जो इस पर निर्भर करता है।
हां, इसे P / Invoke कहा जाता है ।
Win32 API के साथ इसका उपयोग करने के लिए यहां एक शानदार संसाधन साइट है:
वाकई है। यह लेख इस पर आरंभ करने के लिए आपके द्वारा किए जा सकने वाले किसी चीज़ का एक अच्छा उदाहरण है।
हम P / Invoke का उपयोग करके अपने विंडोज मोबाइल उपकरणों पर C # से ऐसा करते हैं ।
ऐसा करने के लिए इस्तेमाल की जाने वाली तकनीक को पी / इनवोक कहा जाता है ; आप इस विषय पर लेख खोज सकते हैं। ध्यान दें कि यह C # से C को कॉल करने के लिए है, C ++ से इतना अधिक नहीं है। तो आपको अपने C ++ कोड को C आवरण में लपेटना होगा जो कि आपका DLL निर्यात करता है।