IKsPin::KsQueryMediums
KsQueryMediums メソッドは、ピンがサポートするメディアを取得する。
構文
HRESULT KsQueryMediums(
KSMULTIPLE_ITEM **ppmi
);
パラメータ
ppmi
[out] KSMULTIPLE_ITEM 構造体へのポインタのアドレス。
戻り値
メソッドが成功すると S_OK を返す。失敗すると HRESULT エラー コードを返す。
注意
このメソッドは、タスク割り当て KSMULTIPLE_ITEM 構造体を返す。この構造体の後に REGPINMEDIUM 構造体が続く (ない場合もある)。KSMULTIPLE_ITEM 構造体の Count メンバで、REGPINMEDIUM 構造体の数を指定する。各 REGPINMEDIUM 構造体は、ピンがサポートするメディアを定義する。
呼び出し元は、CoTaskMemFree 関数を使って、返されたメモリを必ず解放すること。
サンプル コード
次のヘルパー関数は、指定されたメディアにピンを適合させようと試みる。
HRESULT FindMatchingMedium(
IPin *pPin,
REGPINMEDIUM *pMedium,
bool *pfMatch)
{
IKsPin* pKsPin = NULL;
KSMULTIPLE_ITEM *pmi;
*pfMatch = false;
HRESULT hr = pPin->QueryInterface(IID_IKsPin, (void **)&pKsPin);
if (FAILED(hr))
return hr; // ピンは IKsPin をサポートしていない。
hr = pKsPin->KsQueryMediums(&pmi);
pKsPin->Release();
if (FAILED(hr))
return hr; // ピンはメディアをサポートしていない。
if (pmi->Count)
{
// ポインタの算術演算を使って、最初のメディア構造体を参照する。
REGPINMEDIUM *pTemp = (REGPINMEDIUM*)(pmi + 1);
for (ULONG i = 0; i < pmi->Count; i++, pTemp++)
{
if (pMedium->clsMedium == pTemp->clsMedium)
{
*pfMatch = true;
break;
}
}
}
CoTaskMemFree(pmi);
return S_OK;
}
参照