步驟 10: 支援 COM 註冊
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
最後一個剩餘的工作是支援 COM 註冊,讓屬性框架可以建立屬性頁的新實例。 將另一個 CFactoryTemplate 專案新增至全域 g_Templates 陣列,用來註冊 DLL 中的所有 COM 物件。 請勿包含屬性頁的任何篩選設定資訊。
const AMOVIESETUP_FILTER FilterSetupData =
{
/* Not shown ... */
};
CFactoryTemplate g_Templates[] =
{
// This entry is for the filter.
{
wszName,
&CLSID_GrayFilter,
CGrayFilter::CreateInstance,
NULL,
&FilterSetupData
},
// This entry is for the property page.
{
L"Saturation Props",
&CLSID_SaturationProp,
CGrayProp::CreateInstance,
NULL, NULL
}
};
如果您如下列程式碼所示 宣告g_cTemplates ,則它會自動根據陣列大小擁有正確的值:
int g_cTemplates = sizeof(g_Templates)/sizeof(g_Templates[0]);
此外,將靜態 CreateInstance
方法新增至屬性頁類別。 您可以將方法命名為您偏好的任何專案,但簽章必須符合下列範例所示的方法:
static CUnknown * WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr)
{
CGrayProp *pNewObject = new CGrayProp(pUnk);
if (pNewObject == NULL)
{
*pHr = E_OUTOFMEMORY;
}
return pNewObject;
}
若要測試屬性頁,請登錄 DLL,然後在 GraphEdit 中載入篩選。 以滑鼠右鍵按一下篩選準則,然後選取 [篩選屬性]。
相關主題