DirectShow フィルタのビルド

DirectShow フィルタの実装には DirectShow 基底クラスを使うことを推奨する。基底クラスを使ってビルドするには、「ビルド環境の設定」で説明している手順に加え、次の手順を実行する。

  • 基底クラス ライブラリをビルドする。このライブラリは、SDK ルート ディレクトリの下にある Samples\Multimedia\C++\BaseClasses ディレクトリに置かれている。このライブラリには、2 つのバージョンがある。リテール バージョン (Strmbased.lib) とデバッグ バージョン (Strmbasd.lib) である。

  • ヘッダー ファイル Streams.h をインクルードする。

  • __stdcall 呼び出し規則を使う。

  • マルチスレッドの C ランタイム ライブラリ (必要に応じてデバッグ バージョンまたはリテール バージョン) を使う。

  • DLL 関数をエクスポートする定義ファイル (.def) をインクルードする。定義ファイルの例を次に示す。出力ファイルの名前は MyFilter.dll であると想定する。

    LIBRARY MYFILTER.DLL
    EXPORTS 
        DllMain             PRIVATE
        DllGetClassObject   PRIVATE
        DllCanUnloadNow     PRIVATE
        DllRegisterServer   PRIVATE
        DllUnregisterServer PRIVATE
    
  • 次の lib ファイルにリンクする。

    デバッグ ビルド Strmbasd.lib、Msvcrtd.lib、Winmm.lib
    リテール ビルド Strmbase.lib、Msvcrt.lib、Winmm.lib
  • リンカの設定で [デフォルト ライブラリを無視] オプションを選択する。

  • ソース コードの DLL エントリ ポイントを以下のとおり宣言する。

    extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
    BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
    {
        return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
    }
    

以前のバージョン

DirectShow 9.0 より前の基底クラス ライブラリのバージョンでは、次の処理も行う必要がある。

  • デバッグ ビルドでは、プリプロセッサ フラグ DEBUG を定義する。

この手順は、DirectShow 9.0 以降で利用できる基底クラス ライブラリのバージョンでは必要ない。

参照