我在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)”
“自动化错误:系统找不到指定的文件。”
答案 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操作......也许有人知道并帮助我们:)