2014-07-14 6 views
6

सी ++ में COM .dll का उपयोग करने के लिए मुझे संकलन समय की आवश्यकता है #import टीएलबी (या डीएलएल जो टीएलबी निकालता है) और मैं जाने के लिए तैयार हूं। संकलन के क्रम में सी # को डीएलएल पंजीकृत क्यों होना चाहिए (reg-free COM पंजीकृत के समान है)? टीएलबी क्यों पर्याप्त नहीं है?सी # को संदर्भित करने के लिए COM DLL को पंजीकृत करने की आवश्यकता क्यों है?

मेरा प्रश्न नोट करें COM ऑब्जेक्ट का उपयोग करके .dll के संकलन के संबंध में। मैं समझता हूं कि ऑब्जेक्ट रनटाइम के दौरान क्यों पंजीकृत होना चाहिए।

+0

मुझे यकीन नहीं है कि कोई पुराना सी ++ एप्लिकेशन पंजीकरण के बिना COM .dll चला सकता है; ऐसा लगता है कि COM स्वयं का विरोधाभास है। शायद वह एप्लिकेशन COM सर्वर मध्यस्थ के माध्यम से बिना, डीएलएल द्वारा प्रदान की गई कार्यक्षमता का उपयोग कर रहा है। – antiduh

+0

@antiduh नोटिस मैं केवल संकलन के बारे में पूछता हूं, दौड़ नहीं रहा हूं। – TCS

+0

.NET से, आप टीएलबी का संदर्भ दे सकते हैं, आप क्यों कहते हैं कि इसे पंजीकृत होना है? –

उत्तर

3

सी ++ कंपाइलर या कई अन्य कंपाइलर्स के विपरीत, जो पुस्तकालयों को पढ़ सकते हैं, न तो सीएलआर और न ही .NET कंपाइलर्स वास्तव में एक प्रकार की लाइब्रेरी पढ़ते हैं। वे दोनों इंटरऑप लाइब्रेरी पर निर्भर करते हैं, एक प्रकार की लाइब्रेरी से उत्पन्न एक .NET असेंबली। इसमें केवल टीएलबी से डीकंपल की गई घोषणाएं शामिल हैं, एक प्रारूप में जो सीएलआर और कंपाइलर दोनों समझ सकते हैं।

प्राथमिक उपकरण जो यह करता है Tlbimp.exe, प्रकार लाइब्रेरी आयातक है।

चल रहा Tlbimp.exe एक कठिन आवश्यकता नहीं है, हालांकि आप इसे बिल्ड सर्वर पर करने पर विचार करेंगे। आईडीई संदर्भ संदर्भ संवाद से पंजीकृत प्रकार पुस्तकालयों को ब्राउज़ करने का भी समर्थन करता है। प्रोजेक्ट में जो आइटम जोड़ा जाता है, उसमें रजिस्ट्री कुंजी होती है, न कि प्रकार लाइब्रेरी का नाम। <ResolveComReference> एमएसबिल्ड कार्य रजिस्ट्री जानकारी से इंटरऑप असेंबली उत्पन्न करता है।

ऐसा करने का प्रमुख लाभ यह है कि अब मैनिफेस्ट प्रविष्टियों को स्वतः उत्पन्न करना आसान है ताकि COM सर्वर को पंजीकृत किए बिना उपयोग किया जा सके। उर्फ "reg-free COM"। मैनिफेस्ट प्रविष्टियों को प्रदान करने के लिए रजिस्ट्री जानकारी आवश्यक है। संदर्भ के लिए पृथक संपत्ति को सही पर सेट करके बस चालू करें। बहुत वांछनीय।

+0

सबसे पहले, विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद, लेकिन अगर मैं सही ढंग से समझता हूं, तो एक मशीन पर इंटरऑप असेंबली उत्पन्न करना संभव होना चाहिए जो COM DLL पंजीकृत है और फिर बिल्ड सर्वर पर मुझे केवल संदर्भ देने में सक्षम होना चाहिए इंटरऑप और सब कुछ काम करना चाहिए, क्या मुझे यह सही मिला? – TCS

+0

मैंने कोशिश की और संकलन विफल हो गया, मैं जानना चाहता हूं कि यह विफल रहता है क्योंकि मुझे कुछ और याद आ रहा है, या मुझे पूरी चीज पूरी तरह गलत है ... – TCS

+0

आपने एक एक्सवाई सवाल पूछा। मैंने वाई का जवाब दिया, मुझे नहीं पता कि एक्स कैसा दिखता है। एक और प्रश्न पूछें और अपनी समस्या की व्याख्या करें, इसे अच्छी तरह से दस्तावेज करें। –

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

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