0

我在 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# 接口?
  • 如果是这样,我该怎么做?

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

4

1 回答 1

1

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

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

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

于 2012-09-20T12:52:49.040 回答