IMFMetadata
COM公式ドキュメント
オブジェクトのメタデータを管理します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
メタデータの設定および取得に使用する言語を設定します。
| pwszRFC1766 | LPWSTR | in | RFC 1766 準拠の言語タグを含む、null 終端文字列へのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
言語タグの詳細については、RFC 1766「Tags for the Identification of Languages」を参照してください。
現在の言語設定を取得します。
| ppwszRFC1766 | LPWSTR* | out | RFC 1766 準拠の言語タグを含む、null 終端文字列へのポインターを受け取ります。呼び出し元は CoTaskMemFree を呼び出して文字列を解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| メタデータプロバイダーが複数言語をサポートしていません。 | |
| 言語が設定されていません。 |
解説(Remarks)
言語タグの詳細については、RFC 1766「Tags for the Identification of Languages」を参照してください。
IMFMetadata::SetLanguage メソッドと IMFMetadata::GetProperty メソッドは、現在の言語設定に対するメタデータの設定および取得を行います。
メタデータが利用可能な言語の一覧を取得します。
| ppvLanguages | PROPVARIANT* | out | 言語の一覧を受け取る PROPVARIANT へのポインター。一覧は null 終端のワイド文字文字列の配列として返されます。配列内の各文字列は RFC 1766 準拠の言語タグです。 返される PROPVARIANT の型は VT_VECTOR | VT_LPWSTR です。言語タグが存在しない場合、一覧は空になることがあります。呼び出し元は PropVariantClear を呼び出して PROPVARIANT を解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
言語タグの詳細については、RFC 1766「Tags for the Identification of Languages」を参照してください。
現在の言語を設定するには、IMFMetadata::SetLanguage を呼び出します。
例
次の例は、言語タグの一覧を取得し、その一覧を列挙する方法を示しています。
HRESULT DisplayLanguageList(IMFMetadata *pMetadata)
{
PROPVARIANT varLangs;
HRESULT hr = pMetadata->GetAllLanguages(&varLangs);
if (SUCCEEDED(hr))
{
if (varLangs.vt == (VT_VECTOR | VT_LPWSTR))
{
for (ULONG i = 0; i < varLangs.calpwstr.cElems; i++)
{
wprintf(L"%s\n", varLangs.calpwstr.pElems[i]);
}
}
else
{
hr = E_UNEXPECTED;
}
PropVariantClear(&varLangs);
}
return hr;
}
メタデータプロパティの値を設定します。
| pwszName | LPWSTR | in | プロパティの名前を含む、null 終端文字列へのポインター。 |
| ppvValue | PROPVARIANT* | in | プロパティの値を含む PROPVARIANT へのポインター。複数値を持つプロパティの場合は、VT_VECTOR 型の PROPVARIANT を使用します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
メタデータプロパティの値を取得します。
| pwszName | LPWSTR | in | プロパティの名前を含む、null 終端文字列へのポインター。 プロパティ名の一覧を取得するには、IMFMetadata::GetAllPropertyNames を呼び出します。 |
| ppvValue | PROPVARIANT* | out | プロパティの値を受け取る PROPVARIANT へのポインター。PROPVARIANT の型はプロパティによって異なります。複数値を持つプロパティの場合、PROPVARIANT は VT_VECTOR 型になります。呼び出し元は PropVariantClear を呼び出して PROPVARIANT を解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 要求されたプロパティが見つかりませんでした。 |
メタデータプロパティを削除します。
| pwszName | LPWSTR | in | プロパティの名前を含む、null 終端文字列へのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| プロパティが見つかりませんでした。 |
解説(Remarks)
メディアソースの場合、メタデータコレクションからプロパティを削除しても、元のコンテンツは変更されません。
このオブジェクト上のすべてのメタデータプロパティ名の一覧を取得します。
| ppvNames | PROPVARIANT* | out | null 終端のワイド文字文字列の配列を受け取る PROPVARIANT へのポインター。利用可能なプロパティがない場合、PROPVARIANT の型は VT_EMPTY になります。それ以外の場合、PROPVARIANT の型は VT_VECTOR | VT_LPWSTR になります。呼び出し元は PropVariantClear を呼び出して PROPVARIANT を解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFMetadata "{F88CFB8C-EF16-4991-B450-CB8C69E51704}" #usecom global IMFMetadata IID_IMFMetadata "{}" #comfunc global IMFMetadata_SetLanguage 3 wstr #comfunc global IMFMetadata_GetLanguage 4 var #comfunc global IMFMetadata_GetAllLanguages 5 var #comfunc global IMFMetadata_SetProperty 6 wstr,var #comfunc global IMFMetadata_GetProperty 7 wstr,var #comfunc global IMFMetadata_DeleteProperty 8 wstr #comfunc global IMFMetadata_GetAllPropertyNames 9 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFMetadata "{F88CFB8C-EF16-4991-B450-CB8C69E51704}" #usecom global IMFMetadata IID_IMFMetadata "{}" #comfunc global IMFMetadata_SetLanguage 3 wstr #comfunc global IMFMetadata_GetLanguage 4 sptr #comfunc global IMFMetadata_GetAllLanguages 5 sptr #comfunc global IMFMetadata_SetProperty 6 wstr,sptr #comfunc global IMFMetadata_GetProperty 7 wstr,sptr #comfunc global IMFMetadata_DeleteProperty 8 wstr #comfunc global IMFMetadata_GetAllPropertyNames 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。