2012-07-11 105 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