次の方法で共有


手順 10. COM 登録のサポート

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

残りの最後のタスクは、プロパティ フレームがプロパティ ページの新しいインスタンスを作成できるように、COM 登録をサポートすることです。 グローバル g_Templates配列に別の CFactoryTemplate エントリを追加します。これは、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 を作成する方法