Win32 API 日本語リファレンス
ホームGraphics.Imaging › IWICMetadataQueryReader

IWICMetadataQueryReader

COM
IID30989668-e1c9-4597-b395-458eedb808df継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

メタデータクエリ式を使用して、デコーダーまたはその画像フレームからメタデータブロックおよびアイテムを取得するためのメソッドを公開します。

解説(Remarks)

メタデータクエリリーダーは、メタデータクエリ式を使用して埋め込みメタデータにアクセスします。メタデータクエリ言語の詳細については、Metadata Query Language Overview を参照してください。

クエリリーダーの利点は、メタデータアイテムに単一のステップでアクセスできる点です。

クエリリーダーは、GetEnumerator メソッドを利用して、メタデータ階層全体をたどる手段も提供します。 ただし、IWICMetadataBlockReader および IWICMetadataReader の方が、より便利かつ低コストな方法を提供するため、このメソッドの使用は推奨されません。

次のコードは、クエリリーダーを取得し、それを使用してメタデータアイテムを取得する方法を示します。

// Get the query reader
if (SUCCEEDED(hr))
{
    hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}

if (SUCCEEDED(hr))
{
    hr = pQueryReader->GetMetadataByName(L"/app1/ifd/{ushort=18249}", &value);
    PropVariantClear(&value);
}

次のコードは、クエリリーダーを取得し、それを使用して入れ子になったメタデータブロックを取得する方法を示します。

// Get the query reader
if (SUCCEEDED(hr))
{
    hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}

if (SUCCEEDED(hr))
{
    // Get the embedded IFD reader
    hr = pQueryReader->GetMetadataByName(L"/app1/ifd", &value);
    if (value.vt == VT_UNKNOWN)
    {
        hr = value.punkVal->QueryInterface(IID_IWICMetadataQueryReader, (void **)&pEmbedReader);
    }
    PropVariantClear(&value); // Clear value for new query
}

メソッド 4

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

vtbl 3 HRESULT GetContainerFormat(GUID* pguidContainerFormat)

メタデータクエリリーダーのコンテナー形式を取得します。

pguidContainerFormatGUID*outコンテナー形式の GUID を受け取るポインター。

戻り値

型: HRESULT

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

vtbl 4 HRESULT GetLocation(DWORD cchMaxLength, LPWSTR wzNamespace, DWORD* pcchActualLength)

ルートメタデータブロックからの相対的な現在のパスを取得します。

cchMaxLengthDWORDinwzNamespace バッファーの長さ。
wzNamespaceLPWSTRinout現在の名前空間の位置を受け取るポインター。
pcchActualLengthDWORD*out現在の名前空間の位置を取得するために実際に必要となったバッファーの長さ。

戻り値

型: HRESULT

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

解説(Remarks)

wzNamespaceNULL を渡した場合、GetLocationcchMaxLength を無視し、pcchActualLength が指す変数にパスを格納するために必要なバッファー長を返します。

クエリリーダーがメタデータ階層の最上位に対して相対的である場合は、1文字の文字列を返します。

クエリリーダーが入れ子になったメタデータブロックに対して相対的である場合、このメソッドは現在のクエリリーダーへのパスを返します。

vtbl 5 HRESULT GetMetadataByName(LPWSTR wzName, PROPVARIANT* pvarValue)

メタデータクエリ式によって識別されるメタデータブロックまたはアイテムを取得します。

wzNameLPWSTRin要求するメタデータブロックまたはアイテムへのクエリ式。
pvarValuePROPVARIANT*inoutこのメソッドが返るときに、要求されたメタデータブロックまたはアイテムが格納されます。

戻り値

型: HRESULT

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

解説(Remarks)

GetMetadataByName は、メタデータクエリ式を使用して埋め込みメタデータにアクセスします。メタデータクエリ言語の詳細については、Metadata Query Language Overview を参照してください。

同じクエリ式で表される複数のブロックまたはアイテムが存在する場合は、最初に見つかったメタデータブロックまたはアイテムが返されます。

vtbl 6 HRESULT GetEnumerator(IEnumString** ppIEnumString)

メタデータ階層内の現在の相対位置にあるすべてのメタデータアイテムの列挙子を取得します。

ppIEnumStringIEnumString**out現在の IWICMetadataQueryReader で使用できるクエリ文字列を含む列挙子の IEnumString インターフェイスへのポインターを受け取る変数へのポインター。

戻り値

型: HRESULT

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

解説(Remarks)

取得される列挙子には、階層の現在のレベルにあるメタデータブロックおよびアイテムのクエリ文字列のみが含まれます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWICMetadataQueryReader "{30989668-E1C9-4597-B395-458EEDB808DF}"
#usecom global IWICMetadataQueryReader IID_IWICMetadataQueryReader "{}"
#comfunc global IWICMetadataQueryReader_GetContainerFormat  3 var
#comfunc global IWICMetadataQueryReader_GetLocation         4 int,var,var
#comfunc global IWICMetadataQueryReader_GetMetadataByName   5 wstr,var
#comfunc global IWICMetadataQueryReader_GetEnumerator       6 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。