2009-06-01 13 views
74

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

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

उत्तर

78

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

उदाहरण के लिए -/CLR स्विच

#include "NativeType.h" 

public ref class ManagedType 
{ 
    NativeType* NativePtr; 

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

    void ManagedMethod() 
     { NativePtr->NativeMethod(); } 
}; 
तो सी # में

के साथ इस संकलन, अपने ManagedType विधानसभा के लिए एक संदर्भ जोड़ने के लिए, और इतने की तरह उपयोग: के लिए बाहर

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

चेक this blog post एक और समझाया उदाहरण।

1

निश्चित है। This article इस पर शुरू करने के लिए आप जो कुछ कर सकते हैं उसका एक अच्छा उदाहरण है।

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

7

मैं पुस्तकालय आप का उल्लेख से परिचित नहीं हूँ, लेकिन सामान्य रूप में कई प्रकार हैं ऐसा करने के लिए कर रहे हैं:

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

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

3

हां, इसे P/Invoke कहा जाता है।

यहाँ Win32 एपीआई के साथ प्रयोग करने के लिए एक महान संसाधन साइट है:

http://www.pinvoke.net/

7

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

+0

मुझे कॉलबैक और पी/इनवॉक के साथ समस्याएं थीं। सी ++/सीएलआई पर स्विच करने से इन मुद्दों को हल किया गया है। – MedicineMan

-1

क्या आपने अपाचे थ्रिफ्ट माना है?

http://thrift.apache.org/

यह एक बहुत ही बहुत साफ समाधान की तरह लगता है।

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