2012-07-11 93 views
1

我正在编写一个C++/CLI应用程序,该应用程序使用提供许多类的COM DLL。他们中的大多数实现了许多接口。我想知道如何访问每个不同接口的方法。例如,当我在看的类型库中的一个类定义为:使用实现多个接口的coclass

coclass FWFile { 
    [default] interface IFWFile; 
    interface _IFWFileInternal; 
    [default, source] interface _FWFileEvents; 
    interface CStatistics; 
    interface IFWFile2; 
    interface IFWFile3; 
    interface IFWFile4; 
}; 

当我创建这个类型的对象似乎实现IFWFile接口。但是,我想使用IFWFile2中的方法。我可以简单地创建一个IFWFile2类型的对象并施放它吗?

IFWFile2 file2 = (IFWFile2)file1; 
+0

长答案:是的。使用C++/CLI语法。 – 2012-07-11 02:33:51

回答

0

当使用CoCreateInstance()您可以指定由新创建的对象检索的接口。如果您需要多个界面 - 请拨打CoCreateInstance()并使用QueryInterface()来检索其他界面。不要忘记为每个成功的界面检索调用Release()

只是不要C风格转换COM指针 - 接口不保证在类型库中指定的顺序,实际的类不保证实际上已实现接口。始终使用QueryInterface()从COM对象检索接口指针。

+0

C铸造比你说的更糟 - 每个接口都可以用一个完全不同的object_来实现。对于同一接口的多个'QueryInterface'调用,你甚至会得到不同的指针。唯一的要求是查询'IUnknown'总是返回相同的指针。 – bdonlan 2012-07-11 08:21:22