IMFMediaEvent
COM公式ドキュメント
Media Foundation オブジェクトによって生成されたイベントを表します。イベントに関する情報を取得するには、このインターフェイスを使用します。
解説(Remarks)
イベントを生成するオブジェクトを実装している場合は、MFCreateMediaEvent 関数を呼び出して新しいイベント オブジェクトを作成します。
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP with Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
イベントの種類を取得します。イベントの種類は、イベントを発生させた原因を示します。また、イベント値の意味も定義します。
| pmet | DWORD* | out | イベントの種類を受け取ります。イベントの種類の一覧については、Media Foundation Events を参照してください。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP with Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
イベントの拡張型を取得します。
| pguidExtendedType | GUID* | out | 拡張型を識別する GUID を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
カスタム イベントを定義するには、新しい拡張型 GUID を作成し、その GUID を指定して MEExtendedType イベントを送信します。
一部の標準的な Media Foundation イベントも、イベント データの種類を区別するために拡張型を使用します。
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP with Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
イベントのステータスを指定する HRESULT を取得します。
| phrStatus | HRESULT* | out | イベントのステータスを受け取ります。イベントを生成した操作が成功した場合、この値は成功コードになります。失敗コードは、エラー状態がイベントを発生させたことを意味します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP with Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
イベントに関連付けられた値がある場合、その値を取得します。値は PROPVARIANT 構造体として取得されます。実際のデータ型と値の意味は、イベントによって異なります。
| pvValue | PROPVARIANT* | out | PROPVARIANT 構造体へのポインター。メソッドはこの構造体にデータを格納します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを呼び出す前に、PropVariantInit を呼び出して PROPVARIANT 構造体を初期化してください。メソッドが返った後は、PropVariantClear を呼び出して PROPVARIANT データに割り当てられたメモリを解放してください。
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP with Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
例
次の関数は、イベント値が IUnknown ポインターである場合に、その値を取得します。PROPVARIANT 型が VT_UNKOWN でない場合、関数は MF_E_INVALIDTYPE を返します。
// Gets an IUnknown pointer from an IMFMediaEvent event and queries
// the pointer for a specified interface.
//
// NOTE: Applies only to events that contain IUnknown pointers.
// Otherwise, the function returns MF_E_INVALIDTYPE.
template <class Q>
HRESULT GetEventObject(IMFMediaEvent *pEvent, Q **ppObject)
{
*ppObject = NULL; // zero output
PROPVARIANT var;
HRESULT hr = pEvent->GetValue(&var);
if (SUCCEEDED(hr))
{
if (var.vt == VT_UNKNOWN)
{
hr = var.punkVal->QueryInterface(ppObject);
}
else
{
hr = MF_E_INVALIDTYPE;
}
PropVariantClear(&var);
}
return hr;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFMediaEvent "{DF598932-F10C-4E39-BBA2-C308F101DAA3}" #usecom global IMFMediaEvent IID_IMFMediaEvent "{}" #comfunc global IMFMediaEvent_GetType 33 var #comfunc global IMFMediaEvent_GetExtendedType 34 var #comfunc global IMFMediaEvent_GetStatus 35 var #comfunc global IMFMediaEvent_GetValue 36 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFMediaEvent "{DF598932-F10C-4E39-BBA2-C308F101DAA3}" #usecom global IMFMediaEvent IID_IMFMediaEvent "{}" #comfunc global IMFMediaEvent_GetType 33 sptr #comfunc global IMFMediaEvent_GetExtendedType 34 sptr #comfunc global IMFMediaEvent_GetStatus 35 sptr #comfunc global IMFMediaEvent_GetValue 36 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。