IMFCollection
COM公式ドキュメント
IUnknown ポインターの汎用コレクションを表します。
解説(Remarks)
空のコレクションオブジェクトを作成するには、MFCreateCollection を呼び出します。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
コレクション内のオブジェクト数を取得します。(IMFCollection.GetElementCount)
| pcElements | DWORD* | out | コレクション内のオブジェクト数を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
コレクション内のオブジェクトを取得します。
| dwElementIndex | DWORD | in | 取得するオブジェクトの 0 から始まるインデックス。オブジェクトはコレクションに追加された順序でインデックスが付けられます。 |
| ppUnkElement | IUnknown** | out | オブジェクトの IUnknown インターフェイスへのポインターを受け取ります。呼び出し側はこのインターフェイスを解放する必要があります。取得されるポインター値は NULL になる場合があります。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドはコレクションからオブジェクトを削除しません。オブジェクトを削除するには IMFCollection::RemoveElement を呼び出します。
例
// Gets an interface pointer from a collection (IMFCollection).
//
// Q: Interface type
template <class Q>
HRESULT GetCollectionObject(IMFCollection *pCollection,
DWORD dwIndex, Q **ppObject)
{
*ppObject = NULL; // zero output
IUnknown *pUnk = NULL;
HRESULT hr = pCollection->GetElement(dwIndex, &pUnk);
if (SUCCEEDED(hr))
{
hr = pUnk->QueryInterface(IID_PPV_ARGS(ppObject));
pUnk->Release();
}
return hr;
}
コレクションにオブジェクトを追加します。(IMFCollection.AddElement)
| pUnkElement | IUnknown* | in | オブジェクトの IUnknown インターフェイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
pUnkElement が NULL の場合、NULL ポインターがコレクションに追加されます。
コレクションからオブジェクトを削除します。
| dwElementIndex | DWORD | in | 削除するオブジェクトの 0 から始まるインデックス。オブジェクトはコレクションに追加された順序でインデックスが付けられます。 |
| ppUnkElement | IUnknown** | out | オブジェクトの IUnknown インターフェイスへのポインターを受け取ります。呼び出し側はこのインターフェイスを解放する必要があります。このパラメーターを NULL にすることはできませんが、取得されるポインター値は NULL になる場合があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
コレクション内の指定したインデックスにオブジェクトを追加します。
| dwIndex | DWORD | in | オブジェクトがコレクションに追加される 0 から始まるインデックス。 |
| pUnknown | IUnknown* | in | 挿入するオブジェクト。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
コレクションからすべての項目を削除します。
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFCollection "{5BC8A76B-869A-46A3-9B03-FA218A66AEBE}" #usecom global IMFCollection IID_IMFCollection "{}" #comfunc global IMFCollection_GetElementCount 3 var #comfunc global IMFCollection_GetElement 4 int,sptr #comfunc global IMFCollection_AddElement 5 sptr #comfunc global IMFCollection_RemoveElement 6 int,sptr #comfunc global IMFCollection_InsertElementAt 7 int,sptr #comfunc global IMFCollection_RemoveAllElements 8 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFCollection "{5BC8A76B-869A-46A3-9B03-FA218A66AEBE}" #usecom global IMFCollection IID_IMFCollection "{}" #comfunc global IMFCollection_GetElementCount 3 sptr #comfunc global IMFCollection_GetElement 4 int,sptr #comfunc global IMFCollection_AddElement 5 sptr #comfunc global IMFCollection_RemoveElement 6 int,sptr #comfunc global IMFCollection_InsertElementAt 7 int,sptr #comfunc global IMFCollection_RemoveAllElements 8 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。