Win32 API 日本語リファレンス
ホームSystem.WinRT.Metadata › IMetaDataDispenserEx

IMetaDataDispenserEx

COM
IID31bcfce2-dafb-11d2-9f81-00c04f79a0a3継承元IMetaDataDispenser自前メソッド開始 vtbl6

公式ドキュメント

IMetaDataDispenser インターフェースを拡張し、メタデータ API が現在のメタデータスコープに対してどのように動作するかを制御する機能を提供します。

メソッド 6

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

vtbl 6 HRESULT SetOption(GUID* optionid, VARIANT* value)

現在のメタデータスコープに対して、指定されたオプションを所定の値に設定します。このオプションは、現在のメタデータスコープへの呼び出しがどのように処理されるかを制御します。

optionidGUID*in設定するオプションを識別する GUID へのポインタである。
valueVARIANT*in設定する値を保持する VARIANT へのポインタである。

戻り値

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

解説(Remarks)

次の表は、optionId パラメーターが指すことのできる利用可能な GUID と、それに対応する pValue パラメーターの有効な値を示しています。

GUID 説明 pValue パラメーター
MetaDataCheckDuplicatesFor どの項目が重複チェックの対象になるかを制御します。 UI4 型のバリアントである必要があり、CorCheckDuplicatesFor 列挙型の値の組み合わせを含む必要があります。
MetaDataRefToDefCheck どの参照項目が定義に変換されるかを制御します。既定では、メタデータエンジンは、参照項目が実際に現在のスコープ内で定義されている場合、その参照項目を定義に変換することでコードを最適化します。 UI4 型のバリアントである必要があり、CorRefToDefCheck 列挙型の値の組み合わせを含む必要があります。
MetaDataNotificationForTokenMovement メタデータのマージ中に発生するトークンの再マッピングのうち、どれがコールバックを生成するかを制御します。 UI4 型のバリアントである必要があり、CorNotificationForTokenMovement 列挙型の値の組み合わせを含む必要があります。
MetaDataSetENC エディットコンティニュ (ENC) の動作を制御します。一度に設定できる動作モードは 1 つだけです。 UI4 型のバリアントである必要があり、CorSetENC 列挙型の値を含む必要があります。この値はビットマスクではありません。
MetaDataErrorIfEmitOutOfOrder 順序どおりでない出力によって生じるエラーのうち、どれがコールバックを生成するかを制御します。メタデータを順序どおりでなく出力しても致命的ではありませんが、メタデータエンジンが好む順序でメタデータを出力すると、メタデータがよりコンパクトになり、その結果、より効率的に検索できます。 UI4 型のバリアントである必要があり、CorErrorIfEmitOutOfOrder 列挙型の値の組み合わせを含む必要があります。
MetaDataImportOption ENC 中に削除された項目のうち、どの種類のものが列挙子によって取得されるかを制御します。 UI4 型のバリアントである必要があり、CorImportOptions 列挙型の値の組み合わせを含む必要があります。
MetaDataThreadSafetyOptions メタデータエンジンがリーダー/ライターロックを取得してスレッドセーフを保証するかどうかを制御します。既定では、エンジンは呼び出し元によるアクセスがシングルスレッドであると想定するため、ロックは取得されません。メタデータ API を使用する際に適切なスレッド同期を維持する責任はクライアントにあります。 UI4 型のバリアントである必要があり、CorThreadSafetyOptions 列挙型の値を含む必要があります。この値はビットマスクではありません。
MetaDataGenerateTCEAdapters 型ライブラリインポーターが、COM 接続ポイントコンテナー用の密結合イベント (TCE) アダプターを生成するかどうかを制御します。 BOOL 型のバリアントである必要があります。pValuetrue に設定されている場合、型ライブラリインポーターは TCE アダプターを生成します。
MetaDataTypeLibImportNamespace インポート対象の型ライブラリに対して、既定以外の名前空間を指定します。 null 値または BSTR 型のバリアントのいずれかである必要があります。pValue が null 値の場合、現在の名前空間は null に設定されます。それ以外の場合、現在の名前空間はバリアントの BSTR 型に格納されている文字列に設定されます。
MetaDataLinkerOptions リンカーがアセンブリを生成するか、.NET Framework モジュールファイルを生成するかを制御します。 UI4 型のバリアントである必要があり、CorLinkerOptions 列挙型の値の組み合わせを含む必要があります。
MetaDataRuntimeVersion このイメージのビルド対象となった共通言語ランタイムのバージョンを指定します。バージョンは "v1.0.3705" のような文字列として格納されます。 null 値、VT_EMPTY 値、または BSTR 型のバリアントである必要があります。pValue が null の場合、ランタイムバージョンは null に設定されます。pValueVT_EMPTY の場合、バージョンは既定値に設定されます。この既定値は、メタデータコードが実行されている Mscorwks.dll のバージョンから取得されます。それ以外の場合、ランタイムバージョンはバリアントの BSTR 型に格納されている文字列に設定されます。
MetaDataMergerOptions メタデータのマージに関するオプションを指定します。 UI4 型のバリアントである必要があり、CorHdr.h ファイルに記載されている MergeFlags 列挙型の値の組み合わせを含む必要があります。
vtbl 7 HRESULT GetOption(GUID* optionid, VARIANT* pvalue)

現在のメタデータスコープに対して、指定されたオプションの値を取得します。このオプションは、現在のメタデータスコープへの呼び出しがどのように処理されるかを制御します。

optionidGUID*in取得するオプションを識別する GUID へのポインタである。
pvalueVARIANT*inoutオプションの現在の値を受け取る VARIANT へのポインタである。

戻り値

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

解説(Remarks)

次の一覧は、このメソッドでサポートされている GUID を示しています。各 GUID の説明については、SetOption メソッドを参照してください。optionId がこの一覧にない場合、このメソッドは、パラメーターが正しくないことを示す HRESULT E_INVALIDARG を返します。

vtbl 8 HRESULT OpenScopeOnITypeInfo(ITypeInfo* pITI, DWORD dwOpenFlags, GUID* riid, IUnknown** ppIUnk)

指定されたスコープの型を開きます。

pITIITypeInfo*inスコープを開く対象となる型情報を提供する ITypeInfo インターフェースへのポインター。
dwOpenFlagsDWORDinオープンモードのフラグ。
riidGUID*in要求するインターフェース。
ppIUnkIUnknown**out返されるインターフェースへのポインターへのポインター。

戻り値

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

vtbl 9 HRESULT GetCORSystemDirectory(LPWSTR szBuffer, DWORD cchBuffer, DWORD* pchBuffer)

現在の共通言語ランタイム (CLR) を格納しているディレクトリを取得します。このメソッドは、プロセス外デバッガーによる使用のみがサポートされています。他のコンポーネントから呼び出された場合は、E_NOTIMPL を返します。

szBufferLPWSTRoutoptionalディレクトリ名を受け取るバッファー。
cchBufferDWORDinszBuffer のサイズ (バイト単位)。
pchBufferDWORD*inoutszBuffer に実際に返されたバイト数。

戻り値

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

vtbl 10 HRESULT FindAssembly(LPWSTR szAppBase, LPWSTR szPrivateBin, LPWSTR szGlobalBin, LPWSTR szAssemblyName, LPWSTR szName, DWORD cchName, DWORD* pcName)

アセンブリの名前を取得します。

szAppBaseLPWSTRin使用されません。
szPrivateBinLPWSTRin使用されません。
szGlobalBinLPWSTRin使用されません。
szAssemblyNameLPWSTRin検索するアセンブリの名前。
szNameLPWSTRinアセンブリの単純名。
cchNameDWORDinszName のサイズ (バイト単位)。
pcNameDWORD*inout実際に書き込まれた文字数を受け取る。

戻り値

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

vtbl 11 HRESULT FindAssemblyModule(LPWSTR szAppBase, LPWSTR szPrivateBin, LPWSTR szGlobalBin, LPWSTR szAssemblyName, LPWSTR szModuleName, LPWSTR szName, DWORD cchName, DWORD* pcName)

アセンブリモジュールの名前を検索します。

szAppBaseLPWSTRin使用されません。
szPrivateBinLPWSTRin使用されません。
szGlobalBinLPWSTRin使用されません。
szAssemblyNameLPWSTRin検索対象のアセンブリ。
szModuleNameLPWSTRinモジュールの名前。
szNameLPWSTRoutoptionalアセンブリの単純名。
cchNameDWORDinszName のサイズ (バイト単位)。
pcNameDWORD*inoutszName に実際に返された文字数。

戻り値

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

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMetaDataDispenserEx "{31BCFCE2-DAFB-11D2-9F81-00C04F79A0A3}"
#usecom global IMetaDataDispenserEx IID_IMetaDataDispenserEx "{}"
#comfunc global IMetaDataDispenserEx_SetOption              6 var,var
#comfunc global IMetaDataDispenserEx_GetOption              7 var,var
#comfunc global IMetaDataDispenserEx_OpenScopeOnITypeInfo   8 sptr,int,var,sptr
#comfunc global IMetaDataDispenserEx_GetCORSystemDirectory  9 var,int,var
#comfunc global IMetaDataDispenserEx_FindAssembly           10 wstr,wstr,wstr,wstr,wstr,int,var
#comfunc global IMetaDataDispenserEx_FindAssemblyModule     11 wstr,wstr,wstr,wstr,wstr,var,int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。