2010-11-16 19 views
12

मेरे पास एक वीबी 6 एप्लीकेशन है जो COM DLL का उपयोग करता है। डीएलएल सी # में लिखा गया है। सी # प्रोजेक्ट गुणों में मेरे पास "COM इंटरऑप के लिए रजिस्टर" विकल्प चेक किया गया है। वीबी 6 ऐप मेरी विकास मशीन पर ठीक काम करता है।मैं Regsvr32 के साथ सी # में लिखित एक COM DLL कैसे पंजीकृत करूं?

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

इसका क्या मतलब है: CodeProject C# COM Example

जब अन्य मशीनों को तैनाती, Regsvr32.exe मुझे निम्न त्रुटि जब मैं DLL रजिस्टर करने के लिए कोशिश देता है: सी # कोड इस प्रारूप वास्तव में इस प्रकार है? COM DLL के बारे में मैंने पढ़ा है कोई ट्यूटोरियल/दस्तावेज "एंट्री पॉइंट DLLRegisterServer" के बारे में कुछ भी नहीं कहता है।

हमारे पास विभिन्न मशीनों पर RegAsm.exe का उपयोग कर बड़ी समस्याएं हैं, इसलिए हमें वास्तव में एक समाधान की आवश्यकता है जहां हम regsvr32.exe चला सकते हैं, जो कि हम किसी भी मशीन के लिए काम करेंगे (यानी XP, Vista, Windows 7, x86 मशीनें, x64 मशीनें, आदि)

मुझे regsvr32.exe के साथ पंजीकरण करने में सक्षम बनाने के लिए मुझे अपने सी # कोड में जोड़ने की क्या ज़रूरत है?

उत्तर

19

आप नहीं कर सकते। प्रबंधित [ComVisible] कक्षा पुस्तकालयों को Regasm.exe के साथ पंजीकृत करने की आवश्यकता है।

आप इसे परियोजना + गुण, बिल्ड टैब के साथ आईडीई से कर सकते हैं, COM इंटरऑप चेकबॉक्स के लिए रजिस्टर करें। यदि आप Regasm.exe चलाते हैं तो आप आमतौर पर/codebase कमांड लाइन विकल्प चाहते हैं, इसलिए आपको असेंबली को जीएसी में रखना नहीं है। फिर भी एक और विकल्प Regasm.exe को/regfile विकल्प के साथ एक .reg फ़ाइल उत्पन्न करने देना है। रजिस्ट्री को अपडेट करने के लिए आप इसे लक्ष्य मशीन पर चलाएंगे।

संपादित करें: केवल "प्रमुख समस्याएं" टिप्पणी देखी गई। ध्यान दें कि वे क्या हैं, कोड/कोड से कम। आपको 64-बिट मशीनों पर सही संस्करण चुनना होगा। वहाँ दॊ है। और आपको एक उन्नत कमांड प्रॉम्प्ट की आवश्यकता है ताकि यूएसी इसे रोक न सके।

+0

@ हंस - 2 प्रश्न: 64-बिट मशीनों के लिए 2 संस्करण क्या हैं? क्या पंजीकरण के बिना वीबी 6 में COM DLL बनाने, तैनात करने और उपयोग करने का कोई तरीका है? –

+0

32-बिट और 64-बिट संस्करण। तकनीकी ऐप क्लाइंट ऐप में एक रजिस्ट्री-मुक्त COM मेनिफेस्ट के साथ। इसे '' की आवश्यकता है। –

+0

@ माइक वेब: जैसा कि आप वीबी 6 के साथ COM इंटरऑप कर रहे हैं, आपको 1. x86 लक्ष्य के साथ सी # प्रोजेक्ट संकलित करना होगा और 2. c: \ windows \ syswow64 के तहत regasm का उपयोग करें। –

0

आप एक साधारण विंडोज एप्लिकेशन बना सकते हैं और COM DLL पंजीकृत करने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं। व्यवस्थापक के रूप में चलाने के लिए मैनिफेस्ट फ़ाइल को जोड़ना सुनिश्चित करें:

... 

namespace comregister 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     string framework = Environment.GetEnvironmentVariable("SystemRoot") + @"\Microsoft.NET\Framework\v2.0.50727\"; 

     private void button1_Click(object sender, EventArgs e) 
     { 
      if (openFileDialog1.ShowDialog() == DialogResult.OK) 
      { 
       textBox1.Text = openFileDialog1.FileName; 
       button2.Enabled = true; 
       button3.Enabled = true; 
      } 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      FileInfo fi = new FileInfo(textBox1.Text); 
      string fn = fi.FullName.Substring(0, fi.FullName.Length - 4); 
      string dll = "\"" + fi.FullName + "\""; 
      string tlb = "\"" + fn + ".tlb\""; 

      Process p = new Process(); 
      p.StartInfo.FileName = framework + "regasm.exe"; 
      p.StartInfo.Arguments = dll + " /tlb:" + tlb + " /codebase"; 
      p.Start(); 
      p.WaitForExit(); 
      label2.Text = "registered"; 
     } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      FileInfo fi = new FileInfo(textBox1.Text); 
      string dll = "\"" + fi.FullName + "\""; 

      Process p = new Process(); 
      p.StartInfo.FileName = framework + "regasm.exe"; 
      p.StartInfo.Arguments = dll + " /unregister"; 
      p.Start(); 
      p.WaitForExit(); 
      label2.Text = "unregistered"; 
     } 

     private void button4_Click(object sender, EventArgs e) 
     { 
      Application.Exit(); 
     } 
    } 
} 
+1

क्या होगा यदि उपयोगकर्ता के पास .NET Framework का एक अलग संस्करण है? मेरे मामले में मुझे कई संस्करण हैं और कई में RegAsm बिल्कुल नहीं है। केवल v2.0.50727 और v4.0.30319 करता है। –