自动化错误实例化一个.net COM可见的类

问题描述:

当我创建了这个简单的类一个COM互操作的.dll:自动化错误实例化一个.net 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 \ Framework \ v4.0.30319 \ regasm C:\ ComClasses \ Classlibrary1.dll/tlb:Classlibrary1.tlb

最后,我成功添加了一个对.dll的引用,之后VB6给了我对对象的intellisense。

Private Sub Form_Load() 
    Dim score1 As ComWeightedScore 

    Set score1 = New ComWeightedScore 
    score1.Score = 500 

End Sub 

在行Set score1=new ComWeightedScore上引发异常自动化错误。

它不可能比这更简单...错误在哪里?

+0

为什么你说这个错误是在分配int还是long?构造函数调用失败了。如果您从构造函数的主体中删除赋值,它仍会失败吗?此外,提供更多的信息和细节你得到的错误。 –

你忘了/代码库选项在Regasm.exe命令行中。

如果没有它,您必须使用gacutil.exe将程序集强名称并放入GAC。客户端机器上的好主意,只是不在你的机器上。

如果您正在运行64位处理器并将项目编译为'CPU-Any',则需要仅针对x86进行编译或在64位COM +空间中注册dll。包括32位和64位的regasm

实施例:

%WINDIR%\ Microsoft.NET \框架\ v4.0.30319 \ regasm “Contoso.Interop.dll” /tlb:Contoso.Interop.tlb /代码库的Contoso .Interop

%WINDIR%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm “Contoso.Interop.dll” /tlb:Contoso.Interop.tlb /代码库Contoso.Interop