2010-07-27 19 views
7

मेरे पास एक क्लास लाइब्रेरी है जो नेट में लिखा गया है। मैं वीबी 6/वीबीए को उपलब्ध करना चाहता हूं। मैंने जो कोशिश की वह काम नहीं कर सका (जाहिर है क्योंकि मैं इस सवाल से पूछ रहा हूं)। यहां मैंने किया है:एक डीएलएल COM सुलभ बनाना

  1. मैंने विजुअल स्टूडियो 2010 एक्सप्रेस में क्लास लाइब्रेरी प्रोजेक्ट बनाया और कोड को क्लास मॉड्यूल में रखा।
  2. मैंने प्रोजेक्ट गुण खोले और "असेंबली सूचना" पर गए और "COM COM Visible" की जांच की।
  3. मैं "उन्नत संकलन" विकल्पों पर गया और लक्षित नेट 2.0 (यह बहुत आसान कोड है)।
  4. फिर मैंने "सिस्टम" के लिए सभी संदर्भों की अपेक्षा हटा दी।
  5. मैं परियोजना (कोई चेतावनी या त्रुटियों) बनाया गया है और सी में बिन फ़ोल्डर से बाहर DLL की नकल की: \ Windows \ System32 \
  6. मैं DLL रजिस्टर करने के लिए RegSvr32 भाग गया और त्रुटि मिली:

The module "MyDll.dll" was loaded but the entry-point DLLRegisterServer was not found.

Make sure that "MyDll.dll is a valid DLL or OCX file and then try again.

स्पष्ट रूप से मेरा पहला प्रयास थोड़ा सा बेवकूफ था। क्या कोई मार्गदर्शन प्रदान कर सकता है?

+2

regsvr32 .NET असेंबली पर उपयोग नहीं किया जा सकता है। 'Regasm' और वैकल्पिक तर्कों का प्रयोग करें - http://msdn.microsoft.com/en-us/library/tzat5yw6%28VS.71%29.aspx –

उत्तर

10

चरण # 6 गलत है। [ComVisible] प्रकारों के साथ .NET असेंबली Regasm.exe के साथ पंजीकृत हैं। यदि आप डीएलएल को जीएसी में स्थापित नहीं करना चाहते हैं तो/codebase कमांड लाइन विकल्प का उपयोग करें।/Tlb कमांड लाइन विकल्प टाइप लाइब्रेरी बनाता है, आप इसे अपने वीबी 6 प्रोजेक्ट में उपयोग कर सकते हैं।

+0

मैंने regasm.exe के लिए एक फ़ाइल खोज की है और ऐसा लगता है कि यह गायब है। क्या यह केवल विजुअल स्टूडियो के पूर्ण संस्करण के साथ उपलब्ध है? क्या एमएस एक डाउनलोड प्रदान करता है (मैं अभी भी गुगल रहा हूं, लेकिन मैंने सोचा कि आपको शायद पता चलेगा।) – Oorang

+2

यह c: \ windows \ microsoft.net \ framework \ v4.0.30319 निर्देशिका में होना चाहिए। यह आसान बनाने के लिए आप "विजुअल स्टूडियो कमांड प्रॉम्प्ट" खो रहे हैं। लेकिन यह किया जा सकता है। –

+0

ठीक है मैंने RegAsm पाया और इसका इस्तेमाल किया। इसने एक टीएलबी बनाया जिसे मैं संदर्भित कर सकता था। जब मैंने इसे वीबी 6/वीबीए में खोला तो सभी गुण और विधियां गायब थीं। प्रदान किए गए कुछ अन्य लिंक के माध्यम से पढ़कर मैं अनुमान लगाता हूं कि मुझे एक इंटरफ़ेस बनाने की आवश्यकता है (कुछ मैंने नहीं किया, मैंने अभी कक्षा बनाई है)। मैं अभी भी इंटरफेस tweaking कर रहा हूँ, लेकिन यह एक बड़ा कदम था। धन्यवाद। – Oorang

0

मैं काफी निश्चित हूं कि RegSvr32 केवल non.NET DLL पर काम करता है। ग्लोबल असेंबली कैश (जीएसी) में .NET असेंबली संग्रहीत की जाती हैं। आपको gacutil.exe चलाने के लिए है।

+0

उन्हें जीएसी में रखना आवश्यक नहीं है। '/ codebase' कुंजी के साथ regasm बस ठीक होगा। – sharptooth

+0

@ शार्पतोथ: धन्यवाद मुझे नहीं पता था कि –

3

आपको अपने इंटरफेस के लिए GUID को परिभाषित करने और चिह्नित करने के लिए कौन से वर्ग लागू होते हैं, यह चिह्नित करने की आवश्यकता होगी। एमएसडीएन में getting started guide है। आप RegSvr32 चलाने की आवश्यकता नहीं है, लेकिन आप DLL कहीं where the app can find it डाल करने की आवश्यकता है:

After registering an assembly using Regasm.exe, you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application's directory.

भी पूरी प्रक्रिया here का एक अच्छा सिंहावलोकन है।

+0

+1। – Oorang

0

RegSvr32 के बजाय GacUtil का उपयोग करें। RegSvr का उपयोग VB6 के साथ किए गए डीएल के लिए किया जाता है और .NET DLL के लिए आपको GacUtil का उपयोग करने की आवश्यकता होती है क्योंकि इसे वैश्विक असेंबली कैश में जोड़ा जाता है।

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