2011-08-28 10 views
5

instantiating मैं इस साधारण वर्ग के साथ एक COM-इंटरॉप .dll बनाया:स्वचालन त्रुटि जब एक नेट COM दिखाई वर्ग

using System.Runtime.InteropServices; 

namespace ClassLibrary1 
{ 
    [ComVisible(true)] 
    [Guid("795ECFD8-20BB-4C34-A7BE-DF268AAD3955")] 
    public interface IComWeightedScore 
    { 
     int Score { get; set; } 
     int Weight { get; set; } 
} 

[ClassInterface(ClassInterfaceType.None)] 
[Guid("9E62446D-207D-4653-B60B-E624EFA85ED5")] 
public class ComWeightedScore : IComWeightedScore 
{ 

    private int _score; 

    public int Score 
    { 
     get { return _score; } 
     set { _score = value; } 
    } 
    private int _weight; 

    public int Weight 
    { 
     get { return _weight; } 
     set { _weight = value; } 
    } 

    public ComWeightedScore() 
    { 
     _score = 0; 
     _weight = 1; 
    } 
    } 

} मैं का उपयोग कर पंजीकृत यह: C: \ WINDOWS \ Microsoft.NET \ फ्रेमवर्क \ v4.0.30319 \ regasm सी: \ comClasses \ Classlibrary1.dll/tlb: classlibrary1.tlb

अंततः मैंने सफलतापूर्वक .dll के संदर्भ को जोड़ा जिसके बाद वीबी 6 ने मुझे ऑब्जेक्ट पर इंटेलिजेंस दिया।

Private Sub Form_Load() 
    Dim score1 As ComWeightedScore 

    Set score1 = New ComWeightedScore 
    score1.Score = 500 

End Sub 

Set score1=new ComWeightedScore लाइन पर अपवाद स्वचालन त्रुटि उठाई गई है।

यह शायद ही कोई आसान हो सकता है ... त्रुटि कहां है ?!

+0

और आप क्यों कहते हैं कि त्रुटि int या long असाइन करने में है? कन्स्ट्रक्टर कॉल क्या विफल रहता है। यदि आप कन्स्ट्रक्टर के शरीर से असाइनमेंट हटाते हैं तो क्या यह अभी भी असफल हो जाता है? साथ ही, आपको मिलने वाली त्रुटि पर अधिक जानकारी और विवरण प्रदान करें। –

उत्तर

7

आप/codebase भूल गया Regasm.exe कमांड लाइन में विकल्प।

इसके बिना, आपको असेंबली को मजबूत नाम देना होगा और इसे gacutil.exe के साथ जीएसी में रखना होगा। क्लाइंट मशीन पर अच्छा विचार, बस आपके नहीं।

3

यदि आप अपने प्रोजेक्ट के साथ 'CPU-Any' के रूप में संकलित 64 बिट प्रोसेसर पर चल रहे हैं तो आपको या तो केवल x86 के लिए संकलित करने या 64 बिट COM + स्पेस में डीएल पंजीकृत करने की आवश्यकता होगी। दोनों 32 और 64 बिट regasm की

उदाहरण:

% windir% \ Microsoft.NET \ फ्रेमवर्क \ v4.0.30319 \ regasm "Contoso.Interop.dll" /tlb:Contoso.Interop.tlb /codebase कॉन्टोसो \ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm "Contoso.Interop.dll" /tlb:Contoso.Interop.tlb/codebase .Interop

% windir% Contoso.Interop