如何通过COM互操作访问公开多个接口的类?
我有一个CoClass,描述如下:如何通过COM互操作访问公开多个接口的类?,com,com-interop,typelib,midl,tlbimp,Com,Com Interop,Typelib,Midl,Tlbimp,我有一个CoClass,描述如下: [ uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx), version(1.0), helpstring("FooBar") ] coclass FooBar { [default] interface IFoo; interface IBar; } 因此,我的问题是: 为什么tlbimp只显示IFoo接口,而oleview.exe显示两个接口 tlbimp是否只公开接口?为什么
[
uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),
version(1.0),
helpstring("FooBar")
]
coclass FooBar
{
[default] interface IFoo;
interface IBar;
}
因此,我的问题是:
tlbimp
只显示IFoo
接口,而oleview.exe
显示两个接口tlbimp
是否只公开接口?为什么?(根据MSDN[默认值]
“供宏语言使用。”)如果在同一个idl文件中声明接口或从另一个idl文件导入接口,则对象可以根据需要公开任意多个接口。使用CoCreateInstance()获取对象后,需要使用QueryInterface()获取所需的接口。也看看和考虑参考。还有一些例子。谢谢你的评论。我知道我可以通过
QueryInterface()
访问接口,但我的问题涉及从tlbimp
生成并由.NET客户端访问的RCW。我无法在.NET 2.0中调用QueryInterface
(我猜它是在.NET 4.0中引入的,但这不是一个选项)。CLR自动调用QueryInterface,只需将对象强制转换为接口类型。@Hanpassant:谢谢!:)但是当我调用IBar.Something()
比如new FooBar().Something()
(没有显式地将其强制转换为IBar)时,InterOp不能自动QueryInterface
?我不明白的是为什么interop没有从所有接口继承CoClass。。。这将简化客户端开发,因为我可以使用IntelliSense查看所有接口的所有成员。我将接受证实该决定的答复。:)