IMetaDataAssemblyImport
COM公式ドキュメント
アセンブリマニフェストの内容にアクセスして調査するためのメソッドを提供します。
メソッド 14
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定されたメタデータシグネチャを持つアセンブリのプロパティセットを取得します。
| mda | DWORD | in | プロパティを取得する対象のアセンブリを表す mdAssembly メタデータトークン。 |
| ppbPublicKey | void** | in | 公開キーまたはメタデータトークンへのポインター。 |
| pcbPublicKey | DWORD* | inout | 返される公開キーのバイト数。 |
| pulHashAlgId | DWORD* | inout | アセンブリ内のファイルのハッシュに使用されるアルゴリズムへのポインター。 |
| szName | LPWSTR | outoptional | アセンブリの単純名。 |
| cchName | DWORD | in | szName のサイズ(ワイド文字単位)。 |
| pchName | DWORD* | inout | szName に実際に返されたワイド文字数。 |
| pMetaData | ASSEMBLYMETADATA* | inout | アセンブリメタデータを含む ASSEMBLYMETADATA 構造体へのポインター。 |
| pdwAssemblyFlags | DWORD* | inout | アセンブリに適用されたメタデータを記述するフラグ。この値は 1 つ以上の CorAssemblyFlags 値の組み合わせです。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたメタデータシグネチャを持つアセンブリ参照のプロパティセットを取得します。
| mdar | DWORD | in | プロパティを取得する対象のアセンブリ参照を表す mdAssemblyRef メタデータトークン。 |
| ppbPublicKeyOrToken | void** | in | 公開キーまたはメタデータトークンへのポインター。 |
| pcbPublicKeyOrToken | DWORD* | inout | 返される公開キーまたはトークンのバイト数。 |
| szName | LPWSTR | outoptional | アセンブリの単純名。 |
| cchName | DWORD | in | szName のサイズ(ワイド文字単位)。 |
| pchName | DWORD* | inout | szName に実際に返されたワイド文字数へのポインター。 |
| pMetaData | ASSEMBLYMETADATA* | inout | アセンブリメタデータを含む ASSEMBLYMETADATA 構造体へのポインター。 |
| ppbHashValue | void** | in | ハッシュ値へのポインター。これは、AssemblyRefFlags 列挙体の arfFullOriginator フラグが設定されていない限り、参照対象のアセンブリの PublicKey プロパティを SHA-1 アルゴリズムでハッシュしたものです。 |
| pcbHashValue | DWORD* | inout | 返されるハッシュ値のワイド文字数。 |
| pdwAssemblyRefFlags | DWORD* | inout | アセンブリに適用されたメタデータを記述するフラグへのポインター。フラグ値は 1 つ以上の CorAssemblyFlags 値の組み合わせです。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたメタデータシグネチャを持つファイルのプロパティを取得します。
| mdf | DWORD | in | プロパティを取得する対象のファイルを表す mdFile メタデータトークン。 |
| szName | LPWSTR | outoptional | ファイルの単純名。 |
| cchName | DWORD | in | szName のサイズ(ワイド文字単位)。 |
| pchName | DWORD* | inout | szName に実際に返されたワイド文字数。 |
| ppbHashValue | void** | in | ハッシュ値へのポインター。これは、ファイルを SHA-1 アルゴリズムでハッシュしたものです。 |
| pcbHashValue | DWORD* | inout | 返されるハッシュ値のワイド文字数。 |
| pdwFileFlags | DWORD* | inout | ファイルに適用されたメタデータを記述するフラグへのポインター。フラグ値は 1 つ以上の CorFileFlags 値の組み合わせです。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたメタデータシグネチャを持つエクスポート型のプロパティセットを取得します。
| mdct | DWORD | in | エクスポート型を表す mdExportedType メタデータトークン。 |
| szName | LPWSTR | outoptional | エクスポート型の名前。 |
| cchName | DWORD | in | szName のサイズ(ワイド文字単位)。 |
| pchName | DWORD* | inout | szName に実際に返されたワイド文字数。 |
| ptkImplementation | DWORD* | inout | エクスポート型のプロパティを含む、またはそれへのアクセスを可能にする mdFile、mdAssemblyRef、または mdExportedType メタデータトークン。 |
| ptkTypeDef | DWORD* | inout | ファイル内の型を表す mdTypeDef トークンへのポインター。 |
| pdwExportedTypeFlags | DWORD* | inout | エクスポート型に適用されたメタデータを記述するフラグへのポインター。フラグ値は 1 つ以上の CorTypeAttr 値を取ることができます。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたメタデータシグネチャを持つマニフェストリソースのプロパティセットを取得します。
| mdmr | DWORD | in | プロパティを取得する対象のリソースを表す mdManifestResource トークン。 |
| szName | LPWSTR | outoptional | リソースの名前。 |
| cchName | DWORD | in | szName のサイズ(ワイド文字単位)。 |
| pchName | DWORD* | inout | szName に実際に返されたワイド文字数へのポインター。 |
| ptkImplementation | DWORD* | inout | リソースを含むファイルまたはアセンブリをそれぞれ表す mdFile トークンまたは mdAssemblyRef トークンへのポインター。 |
| pdwOffset | DWORD* | inout | ファイル内のリソースの先頭までのオフセットを指定する値へのポインター。 |
| pdwResourceFlags | DWORD* | inout | リソースに適用されたメタデータを記述するフラグへのポインター。フラグ値は 1 つ以上の CorManifestResourceFlags 値の組み合わせです。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
アセンブリマニフェスト内で定義されている mdAssemblyRef インスタンスを列挙します。
| phEnum | void** | inout | 列挙子へのポインター。EnumAssemblyRefs メソッドを初めて呼び出すときは、これは null 値でなければなりません。 |
| rAssemblyRefs | DWORD* | inout | mdAssemblyRef メタデータトークンの列挙。 |
| cMax | DWORD | in | rAssemblyRefs 配列に格納できるトークンの最大数。 |
| pcTokens | DWORD* | inout | rAssemblyRefs に実際に格納されたトークンの数。 |
戻り値
| HRESULT | Description |
|---|---|
| S_OK | EnumAssemblyRefs が正常に返されました。 |
| S_FALSE | 列挙するトークンがありません。この場合、pcTokens は 0 に設定されます。 |
現在のアセンブリマニフェスト内で参照されているファイルを列挙します。
| phEnum | void** | inout | 列挙子へのポインター。このメソッドの初回呼び出し時は null 値でなければなりません。 |
| rFiles | DWORD* | inout | mdFile メタデータトークンを格納するために使用される配列。 |
| cMax | DWORD | in | rFiles に格納できる mdFile トークンの最大数。 |
| pcTokens | DWORD* | inout | rFiles に実際に格納された mdFile トークンの数。 |
戻り値
現在のメタデータスコープにおいて、アセンブリマニフェスト内で参照されているエクスポート型を列挙します。
| phEnum | void** | inout | 列挙子へのポインター。EnumExportedTypes メソッドを初めて呼び出すときは、これは null 値でなければなりません。 |
| rExportedTypes | DWORD* | inout | mdExportedType メタデータトークンの列挙。 |
| cMax | DWORD | in | rExportedTypes 配列に格納できる mdExportedType トークンの最大数。 |
| pcTokens | DWORD* | inout | rExportedTypes に実際に格納された mdExportedType トークンの数。 |
戻り値
| HRESULT | Description |
|---|---|
| S_OK | EnumExportedTypes が正常に返されました。 |
| S_FALSE | 列挙するトークンがありません。この場合、pcTokens は 0 に設定されます。 |
現在のアセンブリマニフェスト内で参照されているリソースの列挙子へのポインターを取得します。
| phEnum | void** | inout | 列挙子へのポインター。EnumManifestResources メソッドを初めて呼び出すときは、これは null 値でなければなりません。 |
| rManifestResources | DWORD* | inout | mdManifestResource メタデータトークンを格納するために使用される配列。 |
| cMax | DWORD | in | rManifestResources に格納できる mdManifestResource トークンの最大数。 |
| pcTokens | DWORD* | inout | rManifestResources に実際に格納された mdManifestResource トークンの数。 |
戻り値
| HRESULT | Description |
|---|---|
| S_OK | EnumManifestResources が正常に返されました。 |
| S_FALSE | 列挙するトークンがありません。この場合、pcTokens は 0 に設定されます。 |
現在のスコープ内のアセンブリへのポインターを取得します。
| ptkAssembly | DWORD* | inout | 取得された、アセンブリを識別する mdAssembly トークンへのポインター。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
エクスポート型の名前とそれを囲む型を指定して、そのエクスポート型へのポインターを取得します。
| szName | LPWSTR | in | エクスポート型の名前。 |
| mdtExportedType | DWORD | in | エクスポート型を囲むクラスのメタデータトークン。要求されたエクスポート型が入れ子型でない場合、この値は mdExportedTypeNil になります。 |
| ptkExportedType | DWORD* | inout | エクスポート型を表す mdExportedType トークンへのポインター。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、参照の解決に共通言語ランタイムが用いる標準的な規則を使用します。
指定された名前を持つマニフェストリソースへのポインターを取得します。
| szName | LPWSTR | in | リソースの名前。 |
| ptkManifestResource | DWORD* | inout | mdManifestResource メタデータトークンを格納するために使用される配列。各トークンは 1 つのマニフェストリソースを表します。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、参照の解決に共通言語ランタイムが用いる標準的な規則を使用します。
指定された列挙インスタンスへの参照を解放します。
| hEnum | void* | inout | 閉じる対象の列挙インスタンス。 |
参照の解決に共通言語ランタイム (CLR) が用いる標準的な規則を使用して、指定された名前を持つアセンブリの配列を取得します。
| szAppBase | LPWSTR | in | 指定されたアセンブリを検索するルートディレクトリ。この値が null に設定されている場合、FindAssembliesByName はグローバルアセンブリキャッシュ内のみでアセンブリを検索します。 |
| szPrivateBin | LPWSTR | in | ルートディレクトリ配下で、アセンブリを検索するセミコロン区切りのサブディレクトリの一覧(例: "bin;bin2")。これらのディレクトリは、既定のプローブ規則で指定されたものに加えて調べられます。 |
| szAssemblyName | LPWSTR | in | 検索するアセンブリの名前。この文字列の形式は、AssemblyName のクラスリファレンスページで定義されています。 |
| ppIUnk | IUnknown** | out | IMetadataAssemblyImport インターフェイスポインターを格納する IUnknown 型の配列。 |
| cMax | DWORD | in | ppIUnk に格納できるインターフェイスポインターの最大数。 |
| pcAssemblies | DWORD* | inout | 返されたインターフェイスポインターの数。つまり、ppIUnk に実際に格納されたインターフェイスポインターの数。 |
戻り値
解説(Remarks)
アセンブリ名が与えられると、FindAssembliesByName メソッドはアセンブリ参照を解決する標準的な規則に従ってアセンブリを検索します。FindAssembliesByName を使うと、呼び出し側はアプリケーションベースやプライベート検索パスなど、アセンブリリゾルバーコンテキストのさまざまな側面を構成できます。
FindAssembliesByName は、渡されたアセンブリ名に対応するアセンブリマニフェストを含むファイルへの IMetaDataImport ポインターを返します。指定されたアセンブリ名が完全に指定されていない場合(たとえばバージョンが含まれていない場合)、複数のアセンブリが返されることがあります。
FindAssembliesByName は、コンパイル時に参照アセンブリを見つけようとするコンパイラーによって一般的に使用されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMetaDataAssemblyImport "{EE62470B-E94B-424E-9B7C-2F00C9249F93}" #usecom global IMetaDataAssemblyImport IID_IMetaDataAssemblyImport "{}" #comfunc global IMetaDataAssemblyImport_GetAssemblyProps 3 int,sptr,var,var,var,int,var,var,var #comfunc global IMetaDataAssemblyImport_GetAssemblyRefProps 4 int,sptr,var,var,int,var,var,sptr,var,var #comfunc global IMetaDataAssemblyImport_GetFileProps 5 int,var,int,var,sptr,var,var #comfunc global IMetaDataAssemblyImport_GetExportedTypeProps 6 int,var,int,var,var,var,var #comfunc global IMetaDataAssemblyImport_GetManifestResourceProps 7 int,var,int,var,var,var,var #comfunc global IMetaDataAssemblyImport_EnumAssemblyRefs 8 sptr,var,int,var #comfunc global IMetaDataAssemblyImport_EnumFiles 9 sptr,var,int,var #comfunc global IMetaDataAssemblyImport_EnumExportedTypes 10 sptr,var,int,var #comfunc global IMetaDataAssemblyImport_EnumManifestResources 11 sptr,var,int,var #comfunc global IMetaDataAssemblyImport_GetAssemblyFromScope 12 var #comfunc global IMetaDataAssemblyImport_FindExportedTypeByName 13 wstr,int,var #comfunc global IMetaDataAssemblyImport_FindManifestResourceByName 14 wstr,var #comfunc global IMetaDataAssemblyImport_CloseEnum 15 sptr #comfunc global IMetaDataAssemblyImport_FindAssembliesByName 16 wstr,wstr,wstr,sptr,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMetaDataAssemblyImport "{EE62470B-E94B-424E-9B7C-2F00C9249F93}" #usecom global IMetaDataAssemblyImport IID_IMetaDataAssemblyImport "{}" #comfunc global IMetaDataAssemblyImport_GetAssemblyProps 3 int,sptr,sptr,sptr,sptr,int,sptr,sptr,sptr #comfunc global IMetaDataAssemblyImport_GetAssemblyRefProps 4 int,sptr,sptr,sptr,int,sptr,sptr,sptr,sptr,sptr #comfunc global IMetaDataAssemblyImport_GetFileProps 5 int,sptr,int,sptr,sptr,sptr,sptr #comfunc global IMetaDataAssemblyImport_GetExportedTypeProps 6 int,sptr,int,sptr,sptr,sptr,sptr #comfunc global IMetaDataAssemblyImport_GetManifestResourceProps 7 int,sptr,int,sptr,sptr,sptr,sptr #comfunc global IMetaDataAssemblyImport_EnumAssemblyRefs 8 sptr,sptr,int,sptr #comfunc global IMetaDataAssemblyImport_EnumFiles 9 sptr,sptr,int,sptr #comfunc global IMetaDataAssemblyImport_EnumExportedTypes 10 sptr,sptr,int,sptr #comfunc global IMetaDataAssemblyImport_EnumManifestResources 11 sptr,sptr,int,sptr #comfunc global IMetaDataAssemblyImport_GetAssemblyFromScope 12 sptr #comfunc global IMetaDataAssemblyImport_FindExportedTypeByName 13 wstr,int,sptr #comfunc global IMetaDataAssemblyImport_FindManifestResourceByName 14 wstr,sptr #comfunc global IMetaDataAssemblyImport_CloseEnum 15 sptr #comfunc global IMetaDataAssemblyImport_FindAssembliesByName 16 wstr,wstr,wstr,sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。