QueryInterface

雖然有一種機制,物件可以透過它以靜態方式表達它所提供的功能(在具現化之前),但基本 COM 機制是使用 IUnknown 稱為 QueryInterface 的方法。

每個介面都是衍生自 IUnknown ,因此每個介面都有 的實作 QueryInterface 。 不論實作為何,這個方法都會使用 IID 呼叫端想要指標之 介面的 來查詢 物件。 如果物件支援該介面,則會 QueryInterface 擷取介面的指標,同時呼叫 AddRef 。 否則,它會傳 E_NOINTERFACE 回錯誤碼。

請注意,您必須隨時遵守 參考計數 規則。 如果您在介面指標上呼叫 Release ,將參考計數遞減為零,則不應該再次使用該指標。 有時候,您可能需要取得物件的弱式參考(也就是說,您可能想要取得其中一個介面的指標,而不需要遞增參考計數),但呼叫 後面接著 Release 即可接受。 QueryInterface 以這類方式取得的指標無效,不應使用。 當定義時 _ATL_DEBUG_INTERFACES ,這更容易變得明顯,因此定義這個宏是尋找參考計數 Bug 的實用方式。

另請參閱

COM 簡介
QueryInterface:在 物件中巡覽