IMFActivate
COM公式ドキュメント
アプリケーションがオブジェクトの作成を遅延できるようにします。
解説(Remarks)
通常、アプリケーションは IMFActivate ポインターを返す何らかの関数を呼び出し、そのポインターを別のコンポーネントに渡します。その別のコンポーネントは、後で ActivateObject を呼び出してオブジェクトを作成します。保護されたメディア パス (PMP) では、IMFActivate ポインターが保護されたプロセスにマーシャリングされ、そのプロセス内でオブジェクトを作成できる場合があります。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
このアクティベーション オブジェクトに関連付けられたオブジェクトを作成します。
| riid | GUID* | in | 要求するインターフェイスのインターフェイス識別子 (IID)。 |
| ppv | void** | out | 要求されたインターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
一部の Microsoft Media Foundation オブジェクトは、解放する前にシャットダウンする必要があります。その場合、ppv で返されるオブジェクトのシャットダウンは呼び出し元の責任となります。オブジェクトをシャットダウンするには、次のいずれかを行います。
- アクティベーション オブジェクトに対して IMFActivate::ShutdownObject を呼び出す。または
- オブジェクト固有のシャットダウン メソッドを呼び出す。このメソッドはオブジェクトの種類によって異なります。次のような可能性があります。
- メディア ソース: IMFMediaSource::Shutdown を呼び出します。
- メディア シンク: IMFMediaSink::Shutdown を呼び出します。
- IMFShutdown インターフェイスをサポートするオブジェクト: IMFShutdown::Shutdown を呼び出します。
ActivateObject を最初に呼び出した後、クライアントが ShutdownObject または IMFActivate::DetachObject を呼び出すまで、以降の呼び出しは同じインスタンスへのポインターを返します。
作成されたオブジェクトをシャットダウンします。
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値のコード | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
IMFActivate::ActivateObject を呼び出してオブジェクトを作成した場合は、そのオブジェクトの使用を終えたときに ShutdownObject を呼び出してください。
ShutdownObject の呼び出しは、アクティベーション オブジェクトを作成したコンポーネントではなく、ActivateObject を呼び出したコンポーネントの責任です。たとえば、一般的な再生アプリケーションでは、アプリケーションがメディア シンク用のアクティベーション オブジェクトを作成しますが、ActivateObject を呼び出すのは Media Session です。したがって、ShutdownObject を呼び出すのはアプリケーションではなく Media Session です。
ShutdownObject が呼び出されると、アクティベーション オブジェクトは作成済みオブジェクトへの内部参照をすべて解放します。再度 ActivateObject を呼び出すと、アクティベーション オブジェクトは相手側オブジェクトの新しいインスタンスを作成します。
作成されたオブジェクトをアクティベーション オブジェクトから切り離します。
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値のコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 実装されていません。 |
解説(Remarks)
アクティベーション オブジェクトは、作成済みオブジェクトへの内部参照をすべて解放します。再度 ActivateObject を呼び出すと、アクティベーション オブジェクトは相手側オブジェクトの新しいインスタンスを作成します。
DetachObject メソッドは、作成済みオブジェクトをシャットダウンしません。DetachObject メソッドが成功した場合、クライアントは作成済みオブジェクトをシャットダウンする必要があります。このルールは、シャットダウン メソッドを持つオブジェクト、または IMFShutdown インターフェイスをサポートするオブジェクトにのみ適用されます。IMFActivate::ActivateObject の解説を参照してください。
このメソッドの実装は任意です。アクティベーション オブジェクトがこのメソッドをサポートしていない場合、このメソッドは E_NOTIMPL を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFActivate "{7FEE9E9A-4A89-47A6-899C-B6A53A70FB67}" #usecom global IMFActivate IID_IMFActivate "{}" #comfunc global IMFActivate_ActivateObject 33 var,sptr #comfunc global IMFActivate_ShutdownObject 34 #comfunc global IMFActivate_DetachObject 35 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFActivate "{7FEE9E9A-4A89-47A6-899C-B6A53A70FB67}" #usecom global IMFActivate IID_IMFActivate "{}" #comfunc global IMFActivate_ActivateObject 33 sptr,sptr #comfunc global IMFActivate_ShutdownObject 34 #comfunc global IMFActivate_DetachObject 35 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。