DirectShow フィルターの構築

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

DirectShow フィルターを実装する場合は、DirectShow 基本クラスを使用することをお勧めします。 基底クラスを使用してビルドするには、「 ビルド環境のセットアップ」に記載されている手順に加えて、次の手順を実行します。

  • SDK ルート ディレクトリの下にある Samples\Multimedia\DirectShow\BaseClasses ディレクトリにある基本クラス ライブラリをビルドします。 ライブラリには、製品版 (Strmbase.lib) とデバッグ バージョン (Strmbasd.lib) の 2 つのバージョンがあります。
  • ヘッダー ファイル Streams.h を含めます。
  • __stdcall呼び出し規約を使用します。
  • マルチスレッド C ランタイム ライブラリ (必要に応じてデバッグまたは小売) を使用します。
  • DLL 関数をエクスポートする定義 (.def) ファイルを含めます。 定義ファイルの例を次に示します。 出力ファイルの名前が MyFilter.dll であると想定しています。
LIBRARY MYFILTER.DLL
EXPORTS 
    DllMain             PRIVATE
    DllGetClassObject   PRIVATE
    DllCanUnloadNow     PRIVATE
    DllRegisterServer   PRIVATE
    DllUnregisterServer PRIVATE
  • 次の lib ファイルへのリンク。
Label
ビルドのデバッグ Strmbasd.lib、Msvcrtd.lib、Winmm.lib
Retail Build 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 以降で使用できる基本クラス ライブラリのバージョンでは、この手順は必要ありません。

DirectShow 基本クラス

DirectShow フィルターの作成