DirectShow フィルターの構築
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/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 以降で使用できる基本クラス ライブラリのバージョンでは、この手順は必要ありません。