IFileSourceFilter
COM公式ドキュメント
IFileSourceFilter インターフェイスは、レンダリング対象のメディアファイルのファイル名とメディアタイプを設定するために、ソースフィルターによって公開されます。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Load メソッドは、ソースフィルターにメディアファイルを読み込ませます。
| pszFileName | LPWSTR | in | 開くファイルの名前へのポインター。 |
| pmt | AM_MEDIA_TYPE* | inoptional | ファイルのメディアタイプへのポインター。NULL を指定できます。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
このメソッドはインターフェイスを初期化します。複数のファイルを読み込むようには設計されておらず、最初の呼び出し以降にこのメソッドを呼び出すと失敗します。
File Source (Async) フィルターの場合、pszFileName はローカルファイルの絶対パス名を指定します。File Source (URL) フィルターの場合、pszFileName はダウンロードするファイルの URL を指定します。その他のフィルター実装では、pszFileName はフィルターに応じてファイル名または URL を必要とする場合があります。
GetCurFile メソッドは、現在のファイルの名前とメディアタイプを取得します。(IFileSourceFilter.GetCurFile)
| ppszFileName | LPWSTR* | out | ファイルの名前を OLESTR 型として受け取るポインターのアドレス。 |
| pmt | AM_MEDIA_TYPE* | outoptional | メディアタイプを受け取る AM_MEDIA_TYPE 構造体へのポインター。このパラメーターには NULL を指定でき、その場合メソッドはメディアタイプを返しません。 |
戻り値
HRESULT 値を返します。取り得る値には次のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| ファイルが開かれていません。 | |
| メモリが不足しています。 | |
| ppszFileName の引数が NULL ポインターです。 |
解説(Remarks)
フィルターがファイルを開いていない場合、メソッドは成功するものの ppszFileName パラメーターに NULL を返すことがあります。メソッドが返ったら値を確認してください。
このメソッドは、ppszFileName で返される文字列のメモリと、メディアタイプ内のフォーマットブロック(存在する場合)のメモリを確保します。呼び出し側は CoTaskMemFree を呼び出してそれらを解放する必要があります。メディアタイプについては、基底クラスライブラリの FreeMediaType 関数を使用できます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IFileSourceFilter "{56A868A6-0AD4-11CE-B03A-0020AF0BA770}" #usecom global IFileSourceFilter IID_IFileSourceFilter "{}" #comfunc global IFileSourceFilter_Load 3 wstr,var #comfunc global IFileSourceFilter_GetCurFile 4 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IFileSourceFilter "{56A868A6-0AD4-11CE-B03A-0020AF0BA770}" #usecom global IFileSourceFilter IID_IFileSourceFilter "{}" #comfunc global IFileSourceFilter_Load 3 wstr,sptr #comfunc global IFileSourceFilter_GetCurFile 4 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。