2010-04-21 14 views
5

मुझे कुछ सी # कोड में देशी सी ++ डीएलएल में कोड तक पहुंचने की आवश्यकता है, लेकिन मुझे मार्शलिंग का पता लगाने में समस्याएं हैं। मैंने कोड के साथ पहले ऐसा किया है जो सीधे सी था, लेकिन ऐसा लगता है कि यह सी ++ कक्षाओं के साथ सीधे संभव नहीं है। इस तथ्य से और भी जटिल बना दिया कि कई वर्गों में वर्चुअल या इनलाइन फ़ंक्शन शामिल हैं। मैंने PInvoke Interop Assistant के माध्यम से हेडर को पार करने का भी प्रयास किया, लेकिन यह केवल सबकुछ पर चकित होगा और वास्तव में नहीं करना चाहिए ... मैं अनुमान लगा रहा हूं क्योंकि यह वास्तव में समर्थित नहीं है।मार्शल ए सी ++ कक्षा से सी #

तो, यदि संभव हो तो, यदि आप .NET कोड से मूल C++ क्लास DLL का उपयोग कर सकते हैं। यदि मुझे कुछ मध्यस्थ (सीएलआर सी ++?) का उपयोग करना है तो यह ठीक है।

उत्तर

9

सी # में ऐसा करने का कोई आसान तरीका नहीं है - मैं सी ++/सीएलआई में एक सरल रैपर परत बनाने की सिफारिश करता हूं जो सी ++ कक्षाओं को .NET कक्षाओं के रूप में उजागर करता है।

It is possible to use P/Invoke and lots of cleverness to call C++ virtual methods, लेकिन मैं इस मार्ग पर नहीं जाऊंगा जब तक कि आपके पास वास्तव में कोई अन्य विकल्प न हो।

+0

बहुत अच्छा जवाब। प्रश्न को सख्ती से हल करने से बेहतर ("कैसे मार्शल ...?") ओपी की वास्तविक * आवश्यकता * को हल कर रहा है। – pyon

0

आप SWIG पर एक नज़र डाल सकते हैं, अगर यह देखने के लिए कि वे मूल रैपर कोड (जो SWIG उत्पन्न करता है) को कैसे संभालें। मैं सी # मूल कोड बाइंडिंग के बारे में कुछ भी नहीं जानता, इसलिए यदि उनका दृष्टिकोण अच्छा है, तो मैं न्याय नहीं कर सकता, लेकिन वे कुछ अन्य भाषा बाइंडिंग के साथ एक सभ्य नौकरी करते हैं।

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