2010-10-25 20 views
11

अब तक मुझे पता चला है कि .lib के बजाय लाइब्रेरी को .dll के रूप में पुन: संकलित करने की आवश्यकता है, और /EHa को /EHsc के बजाय सक्षम करें। अब मुझे एक प्रबंधित डीएल मिला है जिसे मैंने अपने सी # प्रोजेक्ट में संदर्भ के रूप में जोड़ा है।सी # एप में सी ++ लाइब्रेरी का उपयोग कैसे करें?

अब मैं इसका उपयोग कैसे करूं?

मैं कुछ रैपर लिखने के लिए तैयार हूं, लेकिन मुझे नहीं पता कि कहां से शुरू करना है या कैसे देखना है कि मैंने किस कार्य को प्राप्त किया है। मैंने संकलक द्वारा कक्षा के नामों और कार्यों को कैसे उलझाया जा सकता है, इस बारे में थोड़ा सा पढ़ा है ... क्या मुझे वापस जाने और __declspec हर जगह निर्यात (यदि ऐसा है, कैसे?) जोड़ना है, या वीएस -2010 में कोई विकल्प है कहते हैं, "इसे उलझन मत करो!"

प्रश्न में सी ++ लाइब्रेरी अभी भी सक्रिय विकास में है, इसलिए मुझे आशा है कि मैं सी ++ लाइब्रेरी को यथासंभव कम से कम संशोधित कर सकता हूं और इसे कुछ स्विच के साथ समय-समय पर पुन: संकलित कर सकता हूं, और फिर नई कार्यक्षमता का खुलासा करता हूं क्योंकि मुझे इसकी आवश्यकता है ।

उत्तर

8

यदि आप अपने सी ++ को संकलित करने जा रहे हैं (यदि मूल रूप से अप्रबंधित सी ++ था) तो आपको केवल/clr स्विच जोड़ने से कहीं अधिक करने की आवश्यकता होगी। सी # के लिए डीएलएल का उपयोग करने के लिए आपको सीटीएस के आधार पर प्रबंधित कक्षाएं और अन्य प्रकार बनाने की आवश्यकता होगी जो सी # (.NET) के अनुकूल हैं।

See और रेफ कक्षाएं।

विषय (IMHO) के बारे में पढ़ने के लिए एक अच्छी किताब इस one

+0

तो ... प्रबंधित कक्षाएं बनाने के लिए, क्या मुझे सी ++/सीएलआई में ऐसा करने की ज़रूरत है, या क्या? मुझे आगे बढ़ने के लिए थोड़ा और चाहिए। – mpen

+0

हां आपको आगे बढ़ने की आवश्यकता है, मैं लिंक की जांच करने का सुझाव दूंगा। माइक्रोसॉफ्ट से सी ++ को प्रबंधित सी ++ में बदलने के लिए कुछ टूल्स भी हैं, इससे मदद मिल सकती है। इसे देखें: http://stackoverflow.com/questions/151776/are-there-any-tools-for-converting-managed-c-to-c-cli –

6

आप या तो अपने dll से सी शैली कार्यों के रूप में कार्य करता है (यानी, कोई mangling) को बेनकाब कर सकते हैं या आप उन्हें COM ऑब्जेक्ट के रूप में बेनकाब कर सकते हैं।

+0

मैं उन्हें COM ऑब्जेक्ट्स के रूप में कैसे उपयोग करूं? – mpen

4

मैं एक COM wrapper लिखने का सुझाव देता हूं, और इसके बजाय इसका उपयोग करता हूं। परिचय निर्देशों के लिए http://msdn.microsoft.com/en-us/library/035x3kbh%28v=VS.80%29.aspx पर एक नज़र डालें। आप IDISpatch से व्युत्पन्न अपने ऑब्जेक्ट इंटरफेस बनाना चाहते हैं और स्वचालन संगत हो सकते हैं, जो किसी भी कस्टम मार्शलिंग के बिना रनटाइम को उपभोग करने में सक्षम होना चाहिए।

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

यह मेरा सुझाव है, वैसे भी।

2

हां, इसे COM ऑब्जेक्ट में लपेटें। मेरा मानना ​​है कि एटीएल कम से कम प्रयास के साथ ऐसा करने के लिए आपने किया था।

+0

एटीएल? आप किसी ऐसे व्यक्ति से बात कर रहे हैं जिसने पहले कभी ऐसा नहीं किया है। – mpen

+0

ActiveX टेम्पलेट लाइब्रेरी। यह एमएस विकास पर्यावरण का हिस्सा है, और सी ++ में COM ऑब्जेक्ट्स बनाने के लिए उपयोग किया जाता है। –

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