Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › IMFAttributes

IMFAttributes

COM
IID2cd2d921-c447-44a7-a13c-4adabfc247e3継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

オブジェクトにキー/値のペアを格納するための汎用的な手段を提供します。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

メソッド 30

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetItem(GUID* guidKey, PROPVARIANT* pValue)

キーに関連付けられた値を取得します。

guidKeyGUID*in取得する値を識別する GUID。
pValuePROPVARIANT*inoutoptional値を受け取る PROPVARIANT へのポインター。値が見つかった場合、このメソッドは格納されている値のコピーを PROPVARIANT に設定します。このメソッドが割り当てたメモリを解放するには PropVariantClear を呼び出します。このパラメーターは NULL にできます。NULL の場合、メソッドはキーを検索し、キーが見つかれば S_OK を返しますが、値のコピーは行いません。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

次の例は、ある属性ストアから別の属性ストアへ属性をコピーします。

HRESULT CopyAttribute(IMFAttributes *pFrom, IMFAttributes *pTo, REFGUID guidKey)
{
    PROPVARIANT val;

    HRESULT hr = pFrom->GetItem(guidKey, &val);

    if (SUCCEEDED(hr))
    {
        hr = pTo->SetItem(guidKey, val);
        PropVariantClear(&val);
    }
    else if (hr == MF_E_ATTRIBUTENOTFOUND)
    {
        hr = S_OK;
    }
    return hr;
}
vtbl 4 HRESULT GetItemType(GUID* guidKey, MF_ATTRIBUTE_TYPE* pType)

キーに関連付けられた値のデータ型を取得します。

guidKeyGUID*in照会する値を識別する GUID。
pTypeMF_ATTRIBUTE_TYPE*outMF_ATTRIBUTE_TYPE 列挙体のメンバーを受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
指定されたキーはこのオブジェクトに格納されていません。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 5 HRESULT CompareItem(GUID* guidKey, PROPVARIANT* Value, BOOL* pbResult)

格納されている属性値が指定された PROPVARIANT と等しいかどうかを照会します。

guidKeyGUID*in照会する値を識別する GUID。
ValuePROPVARIANT*in比較する値を格納した PROPVARIANT
pbResultBOOL*out属性が Value で指定された値と一致するかどうかを示すブール値を受け取ります。「解説」を参照してください。このパラメーターは NULL にできません。NULL の場合、アクセス違反が発生します。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このメソッドは、以下のいずれかの理由により pbResultFALSE に設定します。

それ以外の場合、このメソッドは pbResultTRUE に設定します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 6 HRESULT Compare(IMFAttributes* pTheirs, MF_ATTRIBUTES_MATCH_TYPE MatchType, BOOL* pbResult)

このオブジェクトの属性を別のオブジェクトの属性と比較します。

pTheirsIMFAttributes*inoptionalこのオブジェクトと比較する対象オブジェクトの IMFAttributes インターフェイスへのポインター。
MatchTypeMF_ATTRIBUTES_MATCH_TYPEin実行する比較の種類を指定する MF_ATTRIBUTES_MATCH_TYPE 列挙体のメンバー。
pbResultBOOL*outブール値を受け取ります。2 つの属性セットが MatchType パラメーターで指定された方法で一致する場合、値は TRUE になります。それ以外の場合、値は FALSE になります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

pThisCompare メソッドが呼び出されるオブジェクト、pTheirspTheirs パラメーターとして渡されるオブジェクトとすると、MatchType によって以下の比較が定義されます。

一致の種類 TRUE を返す条件
MF_ATTRIBUTES_MATCH_OUR_ITEMS pThis 内のすべての属性について、同じキーと値を持つ属性が pTheirs に存在する場合。
MF_ATTRIBUTES_MATCH_THEIR_ITEMS pTheirs 内のすべての属性について、同じキーと値を持つ属性が pThis に存在する場合。
MF_ATTRIBUTES_MATCH_ALL_ITEMS 両方のオブジェクトのキー/値のペアが同一である場合。
MF_ATTRIBUTES_MATCH_INTERSECTION pThis のキーと pTheirs のキーの共通部分を取ります。それらのキーに関連付けられた値が pThispTheirs の両方で同一である場合。
MF_ATTRIBUTES_MATCH_SMALLER 属性の数が少ない方のオブジェクトを取ります。そのオブジェクト内のすべての属性について、同じキーと値を持つ属性がもう一方のオブジェクトに存在する場合。

pTheirs および pbResult パラメーターは NULL にできません。いずれかのパラメーターが NULL の場合、アクセス違反が発生します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 7 HRESULT GetUINT32(GUID* guidKey, DWORD* punValue)

キーに関連付けられた UINT32 値を取得します。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_UINT32 でなければなりません。
punValueDWORD*outUINT32 値を受け取ります。キーが見つかり、データ型が UINT32 の場合、このメソッドは値をこのパラメーターにコピーします。それ以外の場合、このパラメーターの元の値は変更されません。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値が UINT32 ではありません。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 8 HRESULT GetUINT64(GUID* guidKey, ULONGLONG* punValue)

キーに関連付けられた UINT64 値を取得します。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_UINT64 でなければなりません。
punValueULONGLONG*outUINT64 値を受け取ります。キーが見つかり、データ型が UINT64 の場合、このメソッドは値をこのパラメーターにコピーします。それ以外の場合、このパラメーターの元の値は変更されません。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値が UINT64 ではありません。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 9 HRESULT GetDouble(GUID* guidKey, DOUBLE* pfValue)

キーに関連付けられた double 値を取得します。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_DOUBLE でなければなりません。
pfValueDOUBLE*outdouble 値を受け取ります。キーが見つかり、データ型が double の場合、このメソッドは値をこのパラメーターにコピーします。それ以外の場合、このパラメーターの元の値は変更されません。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値が double ではありません。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 10 HRESULT GetGUID(GUID* guidKey, GUID* pguidValue)

キーに関連付けられた GUID 値を取得します。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_GUID でなければなりません。
pguidValueGUID*outGUID 値を受け取ります。キーが見つかり、データ型が GUID の場合、このメソッドは値をこのパラメーターにコピーします。それ以外の場合、このパラメーターの元の値は変更されません。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値が GUID ではありません。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 11 HRESULT GetStringLength(GUID* guidKey, DWORD* pcchLength)

キーに関連付けられた文字列値の長さを取得します。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_STRING でなければなりません。
pcchLengthDWORD*outキーが見つかり、値が文字列型の場合、このパラメーターは終端の NULL 文字を含まない文字列の文字数を受け取ります。文字列値を取得するには IMFAttributes::GetString を呼び出します。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値が文字列ではありません。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 12 HRESULT GetString(GUID* guidKey, LPWSTR pwszValue, DWORD cchBufSize, DWORD* pcchLength)

キーに関連付けられたワイド文字列を取得します。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_STRING でなければなりません。
pwszValueLPWSTRout呼び出し側が割り当てたワイド文字配列へのポインター。この配列は、終端の NULL 文字を含めて文字列を格納できる大きさでなければなりません。キーが見つかり、値が文字列型の場合、このメソッドは文字列をこのバッファーにコピーします。文字列の長さを調べるには IMFAttributes::GetStringLength を呼び出します。
cchBufSizeDWORDinpwszValue 配列のサイズ (文字数)。この値には終端の NULL 文字が含まれます。
pcchLengthDWORD*inoutoptional終端の NULL 文字を除いた文字列の文字数を受け取ります。このパラメーターは NULL にできます。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_OUTOFMEMORY
文字列の長さが大きすぎて UINT32 値に収まりません。
E_NOT_SUFFICIENT_BUFFER
バッファーが文字列を格納するのに十分な大きさではありません。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値が文字列ではありません。

解説(Remarks)

バッファーを割り当てて文字列を格納する IMFAttributes::GetAllocatedString メソッドを使用することもできます。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

次のコード例は、値が文字列である属性を取得する方法を示します。

HRESULT AttributeGetString(IMFAttributes *pAttributes)
{
    HRESULT hr = S_OK;
    UINT32 cchLength = 0;
    WCHAR *pString = NULL;

    hr = pAttributes->GetStringLength(MY_ATTRIBUTE, &cchLength);
    
    if (SUCCEEDED(hr))
    {
        pString = new WCHAR[cchLength + 1];
        if (pString == NULL)
        {
            hr = E_OUTOFMEMORY;
        }
    }

    if (SUCCEEDED(hr))
    {
        hr = pAttributes->GetString(
            MY_ATTRIBUTE, pString, cchLength + 1, &cchLength);
    }

    if (pString)
    {
        delete [] pString;
    }
    return hr;
}
vtbl 13 HRESULT GetAllocatedString(GUID* guidKey, LPWSTR* ppwszValue, DWORD* pcchLength)

キーに関連付けられたワイド文字列を取得します。このメソッドは文字列用のメモリを割り当てます。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_STRING でなければなりません。
ppwszValueLPWSTR*outキーが見つかり、値が文字列型の場合、このパラメーターは文字列のコピーを受け取ります。呼び出し側は CoTaskMemFree を呼び出して文字列のメモリを解放する必要があります。
pcchLengthDWORD*out終端の NULL 文字を除いた文字列の文字数を受け取ります。このパラメーターは NULL にできません。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値が文字列ではありません。

解説(Remarks)

文字列値を呼び出し側が割り当てたバッファーにコピーするには、IMFAttributes::GetString メソッドを使用します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

注意 以前のバージョンのドキュメントでは、pcchLength パラメーターを NULL にできると誤って記載されていました。このパラメーターを NULL に設定しても場合によっては成功することがありますが、保証されません。呼び出し側はこのパラメーターに NULL 以外のポインターを渡す必要があります。
vtbl 14 HRESULT GetBlobSize(GUID* guidKey, DWORD* pcbBlobSize)

キーに関連付けられたバイト配列の長さを取得します。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_BLOB でなければなりません。
pcbBlobSizeDWORD*outキーが見つかり、値がバイト配列の場合、このパラメーターは配列のサイズ (バイト単位) を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値がバイト配列ではありません。

解説(Remarks)

バイト配列を取得するには IMFAttributes::GetBlob を呼び出します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 15 HRESULT GetBlob(GUID* guidKey, BYTE* pBuf, DWORD cbBufSize, DWORD* pcbBlobSize)

キーに関連付けられたバイト配列を取得します。このメソッドは、呼び出し側が割り当てたバッファーに配列をコピーします。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_BLOB でなければなりません。
pBufBYTE*out呼び出し側が割り当てたバッファーへのポインター。キーが見つかり、値がバイト配列の場合、このメソッドは配列をこのバッファーにコピーします。必要なバッファーのサイズを調べるには IMFAttributes::GetBlobSize を呼び出します。
cbBufSizeDWORDinpBuf バッファーのサイズ (バイト単位)。
pcbBlobSizeDWORD*inoutoptionalバイト配列のサイズを受け取ります。このパラメーターは NULL にできます。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_NOT_SUFFICIENT_BUFFER
バッファーが配列を格納するのに十分な大きさではありません。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値がバイト配列ではありません。

解説(Remarks)

バッファーを割り当ててバイト配列を格納する IMFAttributes::GetAllocatedBlob メソッドを使用することもできます。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

次のコード例は、値がバイト配列である属性を取得する方法を示します。

HRESULT AttributeGetBlob(IMFAttributes *pAttributes)
{
    HRESULT hr = S_OK;
    UINT32 cbBlob = 0;
    BYTE *pBlob = NULL;

    hr = pAttributes->GetBlobSize(MY_ATTRIBUTE, &cbBlob);
    
    if (SUCCEEDED(hr))
    {
        pBlob = new BYTE[cbBlob];
        if (pBlob == NULL)
        {
            hr = E_OUTOFMEMORY;
        }
    }

    if (SUCCEEDED(hr))
    {
        hr = pAttributes->GetBlob(MY_ATTRIBUTE, pBlob, cbBlob, &cbBlob);
    }

    if (pBlob)
    {
        delete [] pBlob;
    }
    return hr;
}
vtbl 16 HRESULT GetAllocatedBlob(GUID* guidKey, BYTE** ppBuf, DWORD* pcbSize)

キーに関連付けられたバイト配列を取得します。このメソッドは配列用のメモリを割り当てます。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_BLOB でなければなりません。
ppBufBYTE**outキーが見つかり、値がバイト配列の場合、このパラメーターは配列のコピーを受け取ります。呼び出し側は CoTaskMemFree を呼び出して配列のメモリを解放する必要があります。
pcbSizeDWORD*out配列のサイズ (バイト単位) を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値がバイト配列ではありません。

解説(Remarks)

バイト配列値を呼び出し側が割り当てたバッファーにコピーするには、IMFAttributes::GetBlob メソッドを使用します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 17 HRESULT GetUnknown(GUID* guidKey, GUID* riid, void** ppv)

キーに関連付けられたインターフェイスポインターを取得します。

guidKeyGUID*in取得する値を識別する GUID。属性の型は MF_ATTRIBUTE_IUNKNOWN でなければなりません。
riidGUID*in取得するインターフェイスのインターフェイス識別子 (IID)。
ppvvoid**out要求されたインターフェイスへのポインターを受け取ります。呼び出し側はインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_NOINTERFACE
属性値は IUnknown ポインターですが、要求されたインターフェイスをサポートしていません。
MF_E_ATTRIBUTENOTFOUND
指定されたキーが見つかりませんでした。
MF_E_INVALIDTYPE
属性値が IUnknown ポインターではありません。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 18 HRESULT SetItem(GUID* guidKey, PROPVARIANT* Value)

指定したキーで属性値を追加します。

guidKeyGUID*in設定する値を識別する GUID。このキーが既に存在する場合、このメソッドは古い値を上書きします。
ValuePROPVARIANT*in属性値を格納した PROPVARIANT。このメソッドは値をコピーします。PROPVARIANT の型は、MF_ATTRIBUTE_TYPE 列挙体に列挙されている型のいずれかでなければなりません。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_OUTOFMEMORY
メモリが不足しています。
MF_E_INVALIDTYPE
属性の型が無効です。

解説(Remarks)

このメソッドは、PROPVARIANT の型が MF_ATTRIBUTE_TYPE で定義された属性型のいずれかであるかどうかを確認し、サポートされていない型が使用された場合は失敗します。ただし、このメソッドは PROPVARIANT が指定された属性 GUID に対して正しい型であるかどうかは確認しません。(属性 GUID とプロパティ型をプログラム的に関連付ける方法はありません。) Media Foundation の属性とそのデータ型の一覧については、Media Foundation Attributes を参照してください。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 19 HRESULT DeleteItem(GUID* guidKey)

オブジェクトの属性リストからキー/値のペアを削除します。

guidKeyGUID*in削除する値を識別する GUID。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

指定されたキーが存在しない場合、このメソッドは S_OK を返します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 20 HRESULT DeleteAllItems()

オブジェクトの属性リストからすべてのキー/値のペアを削除します。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 21 HRESULT SetUINT32(GUID* guidKey, DWORD unValue)

UINT32 値をキーに関連付けます。

guidKeyGUID*in設定する値を識別する GUID。このキーが既に存在する場合、このメソッドは古い値を上書きします。
unValueDWORDinこのキーの新しい値。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

UINT32 値を取得するには IMFAttributes::GetUINT32 を呼び出します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 22 HRESULT SetUINT64(GUID* guidKey, ULONGLONG unValue)

UINT64 値をキーに関連付けます。

guidKeyGUID*in設定する値を識別する GUID。このキーが既に存在する場合、このメソッドは古い値を上書きします。
unValueULONGLONGinこのキーの新しい値。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

UINT64 値を取得するには IMFAttributes::GetUINT64 を呼び出します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 23 HRESULT SetDouble(GUID* guidKey, DOUBLE fValue)

double 値をキーに関連付けます。

guidKeyGUID*in設定する値を識別する GUID。このキーが既に存在する場合、このメソッドは古い値を上書きします。
fValueDOUBLEinこのキーの新しい値。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

double 値を取得するには IMFAttributes::GetDouble を呼び出します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 24 HRESULT SetGUID(GUID* guidKey, GUID* guidValue)

GUID 値をキーに関連付けます。

guidKeyGUID*in設定する値を識別する GUID。このキーが既に存在する場合、このメソッドは古い値を上書きします。
guidValueGUID*inこのキーの新しい値。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_OUTOFMEMORY
メモリが不足しています。

解説(Remarks)

GUID 値を取得するには IMFAttributes::GetGUID を呼び出します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 25 HRESULT SetString(GUID* guidKey, LPWSTR wszValue)

ワイド文字列をキーに関連付けます。

guidKeyGUID*in設定する値を識別する GUID。このキーが既に存在する場合、このメソッドは古い値を上書きします。
wszValueLPWSTRinこのキーに関連付ける NULL 終端のワイド文字列。このメソッドは文字列のコピーを格納します。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

文字列を取得するには IMFAttributes::GetString または IMFAttributes::GetAllocatedString を呼び出します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 26 HRESULT SetBlob(GUID* guidKey, BYTE* pBuf, DWORD cbBufSize)

バイト配列をキーに関連付けます。

guidKeyGUID*in設定する値を識別する GUID。このキーが既に存在する場合、このメソッドは古い値を上書きします。
pBufBYTE*inこのキーに関連付けるバイト配列へのポインター。このメソッドは配列のコピーを格納します。
cbBufSizeDWORDin配列のサイズ (バイト単位)。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

バイト配列を取得するには IMFAttributes::GetBlob または IMFAttributes::GetAllocatedBlob を呼び出します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 27 HRESULT SetUnknown(GUID* guidKey, IUnknown* pUnknown)

IUnknown ポインターをキーに関連付けます。

guidKeyGUID*in設定する値を識別する GUID。このキーが既に存在する場合、このメソッドは古い値を上書きします。
pUnknownIUnknown*inこのキーに関連付ける IUnknown ポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

IUnknown ポインターを取得するには IMFAttributes::GetUnknown を呼び出します。

pUnknownNULL にして SetUnknown を呼び出してもエラーにはなりません。ただし、その場合 GetUnknownMF_E_INVALIDTYPE を返します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 28 HRESULT LockStore()

他のスレッドがアクセスできないように属性ストアをロックします。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

LockStore を呼び出したスレッドが、同じオブジェクトに対して他の IMFAttributes メソッドを呼び出すスレッドを待機する場合、このメソッドはデッドロックを引き起こす可能性があります。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 29 HRESULT UnlockStore()

IMFAttributes::LockStore メソッドの呼び出し後に属性ストアのロックを解除します。オブジェクトのロックが解除されている間は、複数のスレッドがオブジェクトの属性にアクセスできます。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 30 HRESULT GetCount(DWORD* pcItems)

このオブジェクトに設定されている属性の数を取得します。

pcItemsDWORD*out属性の数を受け取ります。このパラメーターは NULL にできません。NULL の場合、アクセス違反が発生します。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

すべての属性を列挙するには、各インデックス値に対して IMFAttributes::GetItemByIndex を呼び出します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

vtbl 31 HRESULT GetItemByIndex(DWORD unIndex, GUID* pguidKey, PROPVARIANT* pValue)

指定したインデックスの属性を取得します。

unIndexDWORDin取得する属性のインデックス。属性の数を取得するには IMFAttributes::GetCount を呼び出します。
pguidKeyGUID*outこの属性を識別する GUID を受け取ります。
pValuePROPVARIANT*inoutoptional値を受け取る PROPVARIANT へのポインター。このパラメーターは NULL にできます。NULL でない場合、このメソッドは属性値のコピーを PROPVARIANT に設定します。このメソッドが割り当てたメモリを解放するには PropVariantClear を呼び出します。

戻り値

このメソッドは HRESULT を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
インデックスが無効です。

解説(Remarks)

オブジェクトのすべての属性をスレッドセーフに列挙するには、以下の手順を実行します。

  1. 他のスレッドが属性を追加または削除しないように IMFAttributes::LockStore を呼び出します。
  2. 属性の数を調べるために IMFAttributes::GetCount を呼び出します。
  3. 各属性をインデックスで取得するために GetItemByIndex を呼び出します。
  4. 属性ストアのロックを解除するために IMFAttributes::UnlockStore を呼び出します。
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。
vtbl 32 HRESULT CopyAllItems(IMFAttributes* pDest)

このオブジェクトのすべての属性を別の属性ストアにコピーします。

pDestIMFAttributes*inコピーを受け取る属性ストアの IMFAttributes インターフェイスへのポインター。

戻り値

このメソッドが成功した場合、S_OK を返します。それ以外の場合、HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、pDest に元々格納されていたすべての属性を削除します。

注意

このメソッドを継承する IMFSample に対して CopyAllItems を呼び出した場合、サンプルの時刻、期間、およびフラグはコピー先のサンプルにコピーされません。これらの値は手動で新しいサンプルにコピーする必要があります。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、以下のプラットフォームで利用できます。

すべての属性ではなく単一の属性をコピーするには、次のコードを使用できます。

HRESULT CopyAttribute(IMFAttributes *pFrom, IMFAttributes *pTo, REFGUID guidKey)
{
    PROPVARIANT val;

    HRESULT hr = pFrom->GetItem(guidKey, &val);

    if (SUCCEEDED(hr))
    {
        hr = pTo->SetItem(guidKey, val);
        PropVariantClear(&val);
    }
    else if (hr == MF_E_ATTRIBUTENOTFOUND)
    {
        hr = S_OK;
    }
    return hr;
}
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IMFAttributes "{2CD2D921-C447-44A7-A13C-4ADABFC247E3}"
#usecom global IMFAttributes IID_IMFAttributes "{}"
#comfunc global IMFAttributes_GetItem             3 var,var
#comfunc global IMFAttributes_GetItemType         4 var,var
#comfunc global IMFAttributes_CompareItem         5 var,var,var
#comfunc global IMFAttributes_Compare             6 sptr,int,var
#comfunc global IMFAttributes_GetUINT32           7 var,var
#comfunc global IMFAttributes_GetUINT64           8 var,var
#comfunc global IMFAttributes_GetDouble           9 var,var
#comfunc global IMFAttributes_GetGUID             10 var,var
#comfunc global IMFAttributes_GetStringLength     11 var,var
#comfunc global IMFAttributes_GetString           12 var,var,int,var
#comfunc global IMFAttributes_GetAllocatedString  13 var,var,var
#comfunc global IMFAttributes_GetBlobSize         14 var,var
#comfunc global IMFAttributes_GetBlob             15 var,var,int,var
#comfunc global IMFAttributes_GetAllocatedBlob    16 var,var,var
#comfunc global IMFAttributes_GetUnknown          17 var,var,sptr
#comfunc global IMFAttributes_SetItem             18 var,var
#comfunc global IMFAttributes_DeleteItem          19 var
#comfunc global IMFAttributes_DeleteAllItems      20
#comfunc global IMFAttributes_SetUINT32           21 var,int
#comfunc global IMFAttributes_SetUINT64           22 var,int64
#comfunc global IMFAttributes_SetDouble           23 var,double
#comfunc global IMFAttributes_SetGUID             24 var,var
#comfunc global IMFAttributes_SetString           25 var,wstr
#comfunc global IMFAttributes_SetBlob             26 var,var,int
#comfunc global IMFAttributes_SetUnknown          27 var,sptr
#comfunc global IMFAttributes_LockStore           28
#comfunc global IMFAttributes_UnlockStore         29
#comfunc global IMFAttributes_GetCount            30 var
#comfunc global IMFAttributes_GetItemByIndex      31 int,var,var
#comfunc global IMFAttributes_CopyAllItems        32 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。