一,QueryInterface函數原型:
HRESULT __stdcall QueryInterface(const IID&iid,void **ppv);
iid:標志客戶所需的接口。是”一個接口標志符“結構(IID)。ppv:QueryInterface用來存放所請求接口的地址。
返回值:可以返回S_OK 或 E_NOINTERFACE應該用SUCEEDED或者FAILED宏驗證是否成功。
使用方法:
假如知道一個指向IUnknown接口的指針pI,傳給它一個接口標志符即可
例如:
多重繼承及類型轉換。
通常將一種類型的指針轉換為另一種類型并不會改變它的值。為了支持多重繼承,某些情況下,C++必須改變類指針的值。假如一個類定義如下:
class CA: public IX,public IY{...};
由于CA同時繼承了IX,IY因此可以使用IX或IY指針的地方均可以使用指向CA的指針。
foo需要一個指向合法的IX的虛擬函數表的指針;bar需要一個指向合法的IY的虛擬函數表的指針;當然IX和IY的虛擬函數表的內容是不一樣的。因此將一個IX vtbl傳給bar時,此函數是不能正常工作的。因此編譯器將同一指針傳給foo和bar是不可能的,它必須對CA的指針進行修改以便他指向一個合適的vtbl指針。下圖顯示了CA對象的內存結構。
Copyright 艾凡赫.