QueryInterface
雖然有一種機制,物件可以透過它以靜態方式表達它所提供的功能(在具現化之前),但基本 COM機制是使用 IUnknown
稱為 QueryInterface
的方法。
每個介面都是衍生自 IUnknown
,因此每個介面都有 的實作 QueryInterface
。 不論實作為何,這個方法都會使用 IID
呼叫端想要指標之 介面的 來查詢 物件。 如果物件支援該介面,則會 QueryInterface
擷取介面的指標,同時呼叫 AddRef
。 否則,它會傳 E_NOINTERFACE
回錯誤碼。
請注意,您必須隨時遵守 參考計數 規則。 如果您在介面指標上呼叫 Release
,將參考計數遞減為零,則不應該再次使用該指標。 有時候,您可能需要取得物件的弱式參考(也就是說,您可能想要取得其中一個介面的指標,而不需要遞增參考計數),但呼叫 後面接著 Release
即可接受。QueryInterface
以這類方式取得的指標無效,不應使用。 當定義時 _ATL_DEBUG_INTERFACES
,這更容易變得明顯,因此定義這個巨集是尋找參考計數 Bug 的實用方式。