共用方式為


步驟 10: 支援 COM 註冊

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 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 中載入篩選。 以滑鼠右鍵按一下篩選準則,然後選取 [篩選屬性]。

建立篩選屬性頁

如何建立 DirectShow 篩選 DLL