2008-12-10 14 views
5

मुझे लगता है कि मैं एक सी # डीएलएल संकलित कर सकता हूं और फिर इसे COM ऑब्जेक्ट के रूप में उजागर कर सकता हूं ताकि इसे VBscript से CreateObject'd किया जा सके। मुझे यकीन नहीं है कि यह करने में शामिल कदम ...मैं vbScript से .NET कोड (सी #/vb.net) कैसे कॉल करूं?

उत्तर

6

ऐसा करना बहुत आसान हो सकता है। लेकिन वहां बहुत सारे स्थान हैं जहां यह इतना आसान नहीं है। यह इस बात पर निर्भर करता है कि आपकी कक्षा को क्या करने में सक्षम होना चाहिए, और आप इसे कैसे तैनात करना चाहते हैं।

कुछ मुद्दों पर विचार करना:

  • आपकी कक्षा एक parameterless निर्माता होना आवश्यक है।
  • यह स्थिर तरीकों का पर्दाफाश नहीं कर सकता है।
  • वैश्विक असेंबली कैश में आपके COM DLL को तैनात कर रहा है ठीक है? यदि नहीं, तो आपको इसे एक मजबूत नाम देना होगा और इसे regasm /codebase का उपयोग करके पंजीकृत करना होगा।
  • क्या आपको लगता है कि कौन सी GUID वर्ग और उसके इंटरफेस की पहचान करती है? यदि नहीं, तो आप regasm उन्हें असाइन कर सकते हैं, लेकिन कक्षा पंजीकृत होने पर वे हर बार अलग-अलग होंगे (और हर जगह)। यदि आपको इंस्टॉलेशन में इनविरिएंट रहने के लिए GUID की आवश्यकता है, तो आपको Guid विशेषता वाले सदस्यों को चिह्नित करने की आवश्यकता होगी।
  • क्या आप .NET और COM के बीच डेटा प्रकारों के डिफ़ॉल्ट मार्शलिंग का उपयोग करने जा रहे हैं? यदि नहीं, तो आपको MarshalAs विशेषता के साथ गुणों और विधियों को चिह्नित करने की आवश्यकता होगी।
  • क्या इससे कोई फर्क पड़ता है कि आपकी कक्षा किस प्रकार का COM इंटरफ़ेस उजागर करती है? यदि ऐसा है, तो आपको InterfaceType विशेषता से निपटने की आवश्यकता होगी।
  • क्या आपकी कक्षा को घटनाओं को बढ़ाने या जवाब देने की आवश्यकता है? यदि हां, तो आप अपने वर्ग इंटरफ़ेस को कैसे डिज़ाइन करते हैं इसके प्रभाव हैं।

COM इंटरऑप और .Net here के बारे में बहुत अच्छा (यदि दिनांकित) आलेख है। (लेख पुस्तकालयों की तरह, लेखों के बारे में बहुत सारी चीजें आपके बारे में बात करती हैं, अब आपके लिए स्वचालित रूप से संभाली जाती हैं।) और Microsoft's documentation अद्यतित है, लेकिन काफी विस्तृत नहीं है।

5

आपको असेंबली पंजीकृत करने के लिए regasm उपयोगिता का उपयोग करना चाहिए (जैसे आप COM सर्वर के साथ regsvr32 करते हैं)। फिर आप इसे COM से उपयोग कर सकते हैं। सुनिश्चित करें कि यह जीएसी में स्थापित है। COM से उपयोग करने योग्य होने के लिए सामान [ComVisible(true)] होना चाहिए।

1

प्रत्येक प्रोजेक्ट के लिए "COM Accessible" विकल्प है जिसे आप चुन सकते हैं। फिर, ज़ाहिर है, आपको इसे इस्तेमाल करने के लिए असेंबली को पंजीकृत करना होगा, लेकिन यह इसके बारे में है।


मैं थोड़ा शिकार सी # (मैं VB.Net करने के लिए इस्तेमाल कर रहा हूँ) के लिए यह पता लगाने के लिए जाना था, लेकिन आप समाधान Explorer में Properties फ़ोल्डर पर डबल क्लिक करके विकल्प मिल सकता है चुनने, Application टैब और फिर Assembly Information... बटन पर क्लिक करें।

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