次の方法で共有


DLL 関数

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/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」を参照してください。

DllRegisterServerDllUnregisterServer を実装する必要がありますが、DirectShow には、必要な作業を行う AMovieDllRegisterServer2 という名前の関数が用意されています。 コンポーネントは、次の例に示すように、単にこの関数をラップできます。

STDAPI DllRegisterServer()
{
    return AMovieDllRegisterServer2( TRUE );
}

STDAPI DllUnregisterServer()
{
    return AMovieDllRegisterServer2( FALSE );
}

ただし、 DllRegisterServerDllUnregisterServer 内では、必要に応じて登録プロセスをカスタマイズできます。 DLL にフィルターが含まれている場合は、追加の作業が必要になる場合があります。 詳細については、「 DirectShow フィルターを登録する方法」を参照してください。

モジュール定義 (.def) ファイルで、エントリ ポイント関数を除くすべての DLL 関数をエクスポートします。 .def ファイルの例を次に示します。

EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

dll は、Regsvr32.exe ユーティリティを使用して登録できます。

DirectShow フィルター DLL を作成する方法