我在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;
}
总之,我想知道:
欢迎所有答案。提前感谢您提交的任何答案。
答案 0 :(得分:1)
使用importlib
导入TLB时,您看不到当前TLB中的接口,因为它们不是TLB的一部分。这些接口已在TestClass
类型库中定义,因此它们不能在CommonPrograms
库中具有其他定义。
如果要在其他位置定义接口但将其作为TLB的一部分,则需要使用import TestClass.idl
导入它。从TLB生成IDL的一种方法是在OLE / COM对象查看器中打开TLB并选择File->Save As
,然后进行编辑。我想这不是你想要的,因为你很可能想让这个程序自动化。
但是,对于importlib
,您仍然可以从CommonPrograms类型引用TestClass
接口,因此这通常不是一个很大的障碍,但这显然取决于您的要求。