在IDL库中包含C#接口

时间:2012-09-20 12:01:58

标签: c# c++ com idl midl

我在C#中定义了一个接口,例如:

[ComVisible(true), Guid("E37EBA3C-FB2E-4D4A-8A90-F6FAA99E85C9")]
public interface TestClass
{
    public void test_function();
}

我想将它包含在IDL中的库定义中。我尝试通过从C#接口生成.tlb并将其包含在importlib中来实现此目的。但是,当我编译我的idl文件时,我没有在我的库中看到这个接口,但是我通过导入它们的idl文件看到了我在这个库中定义的所有其他接口。

import "AnotherClass.idl"
library COMMONPROGRAMS{
    importLib(stdole32.tlb)
    importLib(stdole2.tlb)
    importLib(TestClass.tlb)

    interface TestClass;
    interface AnotherClass;
}

总之,我想知道:

  • 是否可以在IDL库中包含C#接口?
  • 如果是这样,我该怎么做?

欢迎所有答案。提前感谢您提交的任何答案。

1 个答案:

答案 0 :(得分:1)

使用importlib导入TLB时,您看不到当前TLB中的接口,因为它们不是TLB的一部分。这些接口已在TestClass类型库中定义,因此它们不能在CommonPrograms库中具有其他定义。

如果要在其他位置定义接口但将其作为TLB的一部分,则需要使用import TestClass.idl导入它。从TLB生成IDL的一种方法是在OLE / COM对象查看器中打开TLB并选择File->Save As,然后进行编辑。我想这不是你想要的,因为你很可能想让这个程序自动化。

但是,对于importlib,您仍然可以从CommonPrograms类型引用TestClass接口,因此这通常不是一个很大的障碍,但这显然取决于您的要求。