次の方法で共有


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;
}

参照