注册COM互操作性

时间:2011-01-21 12:52:24

标签: c# excel vba com interop

我在C#中创建了以下类库:

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
//[Guid(<Generate GUID here>)]
public interface _None1
{
    int retval { get; }
}

[ClassInterface(ClassInterfaceType.None)]
//[Guid(<Generate GUID here>)]
[ProgId("Lotr.Test")]
public class None : _None1
{
    public int retval
    {
        get
        { return 1; }
    }
} 

然后我使用“Register for COM Interop”和“Make Assembly COM-visible”选项编译它。 当我尝试在我的机器上使用Excel 2007 VBA访问它时,工作正常。但是,如果我将.dll和.tlb文件带到另一台机器上,然后使用regasm注册它,注册就好了,我可以通过tlb在Excel VBA中引用它,intellisense就像发条一样,但是执行时,VBA运行时会出现以下错误:
“运行时错误:-2147024894(80070002)”
“自动化错误:系统找不到指定的文件。”

2 个答案:

答案 0 :(得分:3)

您可能需要使用/codebase regasm键:

regasm your_assembly_name.dll /codebase

答案 1 :(得分:0)

我的COM程序集中有一些不同的东西:

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
//[Guid(<Generate GUID here>)]
public interface _None1
{
    [DispId(1)]
    int retval { get; }
}

[ClassInterface(ClassInterfaceType.None)]
//[Guid(<Generate GUID here>)]
[ProgId("Lotr.Test")]
public class None : _None1
{
    [STAThread]
    public int retval
    {
        get
        { return 1; }
    }
} 

我不知道在COM界面中你是否可以使用getter和setter操作......也许有人知道并帮助我们:)