DLL でのFile-Handler インスタンスの作成
[このページに関連付けられている機能である カスタム ファイルハンドラーとストリーム ハンドラーは、従来の機能です。 MediaStreamSource クラスに置き換わりました。 MediaStreamSource クラスは、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、カスタム ファイルハンドラーとストリーム ハンドラーではなく MediaStreamSource クラスを使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
アプリケーションでファイル ハンドラー DLL またはストリーム ハンドラーを指定すると、システムはクラス識別子によってレジストリ内でそれを検索して読み込みます。 次に、システムは DLL の DllGetClassObject 関数を呼び出して、ファイルまたはストリーム ハンドラーのインスタンスを作成します。 次の例 (C++で記述) は、ファイル ハンドラーがインスタンスを作成する方法を示しています。
// Main DLL entry point.
STDAPI DllGetClassObject(const CLSID FAR& rclsid,
const IID FAR& riid, void FAR* FAR* ppv)
{
HRESULT hresult;
hresult = CAVIFileCF::Create(rclsid, riid, ppv);
return hresult;
}
HRESULT CAVIFileCF::Create(const CLSID FAR& rclsid,
const IID FAR& riid, void FAR* FAR* ppv)
{
// The following is the class factory creation and not an
// actual PAVIFile.
CAVIFileCF FAR* pAVIFileCF;
IUnknown FAR* pUnknown;
HRESULT hresult;
// Create the instance.
pAVIFileCF = new FAR CAVIFileCF(rclsid, &pUnknown);
if (pAVIFileCF == NULL)
return ResultFromScode(E_OUTOFMEMORY);
// Set the interface pointer.
hresult = pUnknown->QueryInterface(riid, ppv);
if (FAILED(GetScode(hresult)))
delete pAVIFileCF;
return hresult;
}