INonDelegatingUnknown
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
介面 INonDelegatingUnknown
是已重新命名的 IUnknown 版本,可啟用對相同 COM 物件中非委派和委派 IUnknown 介面的支援。
語法
interface INonDelegatingUnknown
{
virtual HRESULT NonDelegatingQueryInterface(REFIID riid, LPVOID *ppv) PURE;
virtual ULONG NonDelegatingAddRef(void) PURE;
virtual ULONG NonDelegatingRelease(void) PURE;
};
備註
若要用於 INonDelegatingUnknown
多重繼承,請執行下列步驟。
從介面衍生您的類別,例如 IMyInterface。
在您的類別定義中包含 DECLARE_IUNKNOWN ,以宣告呼叫外部未知之 QueryInterface、 AddRef和 Release 的實作。
覆寫 NonDelegatingQueryInterface 以使用下列程式碼公開 IMyInterface:
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
宣告並實作 IMyInterface 的成員函式。
INonDelegatingUnknown
若要用於巢狀介面,請執行下列步驟:
宣告衍生自 CUnknown 的類別。
在您的類別定義中包含 DECLARE_IUNKNOWN 。
覆寫 NonDelegatingQueryInterface 以使用下列程式碼公開 IMyInterface:
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
實作 IMyInterface 的成員函式。 使用 CUnknown::GetOwner 來存取 COM 物件類別。
在您的 COM 物件類別中,將巢狀類別設為 COM 物件類別的 Friend,並將巢狀類別的實例宣告為 COM 物件類別的成員。
因為您必須一律將外部未知和 HRESULT 傳遞至 CUnknown 建構函式,所以您無法使用預設建構函式。 您必須讓成員變數成為類別的指標,並在建構函式中建立新的呼叫,才能實際建立它。
以下列程式碼 覆寫 NonDelegatingQueryInterface :
if (riid == IID_IMyInterface) {
return m_pImplFilter->
NonDelegatingQueryInterface(IID_IMyInterface, ppv);
} else {
return CUnknown::NonDelegatingQueryInterface(riid, ppv);
}
您可以有混合類別,可透過多重繼承支援某些介面,以及透過巢狀類別支援某些介面。
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|
另請參閱