DLL 関数
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
このトピックでは、Microsoft DirectShow でダイナミック リンク ライブラリ (DLL) としてコンポーネントを実装する方法について説明します。
DLL は、登録、登録解除、およびメモリへの読み込みができるように、次の関数を実装する必要があります。
- DllMain: DLL エントリ ポイント。 DllMain という名前は、ライブラリ定義関数名のプレースホルダーです。 DirectShow 実装では、 DllEntryPoint という名前を使用します。 詳細については、プラットフォーム SDK に関するページを参照してください。
- DllGetClassObject: クラス ファクトリ インスタンスを作成します。 前のセクションで説明しました。
- DllCanUnloadNow: DLL を安全にアンロードできるかどうかを照会します。
- DllRegisterServer: DLL のレジストリ エントリを作成します。
- DllUnregisterServer: DLL のレジストリ エントリを削除します。
これらのうち、最初の 3 つが DirectShow によって実装されます。 ファクトリ テンプレートが m_lpfnInit メンバー変数に初期化関数を提供する場合、その関数は DLL エントリ ポイント関数内から呼び出されます。 システムが DLL エントリ ポイント関数を呼び出すタイミングの詳細については、「 DllMain」を参照してください。
DllRegisterServer と DllUnregisterServer を実装する必要がありますが、DirectShow には、必要な作業を行う AMovieDllRegisterServer2 という名前の関数が用意されています。 コンポーネントは、次の例に示すように、単にこの関数をラップできます。
STDAPI DllRegisterServer()
{
return AMovieDllRegisterServer2( TRUE );
}
STDAPI DllUnregisterServer()
{
return AMovieDllRegisterServer2( FALSE );
}
ただし、 DllRegisterServer と DllUnregisterServer 内では、必要に応じて登録プロセスをカスタマイズできます。 DLL にフィルターが含まれている場合は、追加の作業が必要になる場合があります。 詳細については、「 DirectShow フィルターを登録する方法」を参照してください。
モジュール定義 (.def) ファイルで、エントリ ポイント関数を除くすべての DLL 関数をエクスポートします。 .def ファイルの例を次に示します。
EXPORTS
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
dll は、Regsvr32.exe ユーティリティを使用して登録できます。
関連トピック