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

IMetaDataAssemblyImport

COM
IIDee62470b-e94b-424e-9b7c-2f00c9249f93継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

アセンブリマニフェストの内容にアクセスして調査するためのメソッドを提供します。

メソッド 14

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

vtbl 3 HRESULT GetAssemblyProps(DWORD mda, void** ppbPublicKey, DWORD* pcbPublicKey, DWORD* pulHashAlgId, LPWSTR szName, DWORD cchName, DWORD* pchName, ASSEMBLYMETADATA* pMetaData, DWORD* pdwAssemblyFlags)

指定されたメタデータシグネチャを持つアセンブリのプロパティセットを取得します。

mdaDWORDinプロパティを取得する対象のアセンブリを表す mdAssembly メタデータトークン。
ppbPublicKeyvoid**in公開キーまたはメタデータトークンへのポインター。
pcbPublicKeyDWORD*inout返される公開キーのバイト数。
pulHashAlgIdDWORD*inoutアセンブリ内のファイルのハッシュに使用されるアルゴリズムへのポインター。
szNameLPWSTRoutoptionalアセンブリの単純名。
cchNameDWORDinszName のサイズ(ワイド文字単位)。
pchNameDWORD*inoutszName に実際に返されたワイド文字数。
pMetaDataASSEMBLYMETADATA*inoutアセンブリメタデータを含む ASSEMBLYMETADATA 構造体へのポインター。
pdwAssemblyFlagsDWORD*inoutアセンブリに適用されたメタデータを記述するフラグ。この値は 1 つ以上の CorAssemblyFlags 値の組み合わせです。

戻り値

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

vtbl 4 HRESULT GetAssemblyRefProps(DWORD mdar, void** ppbPublicKeyOrToken, DWORD* pcbPublicKeyOrToken, LPWSTR szName, DWORD cchName, DWORD* pchName, ASSEMBLYMETADATA* pMetaData, void** ppbHashValue, DWORD* pcbHashValue, DWORD* pdwAssemblyRefFlags)

指定されたメタデータシグネチャを持つアセンブリ参照のプロパティセットを取得します。

mdarDWORDinプロパティを取得する対象のアセンブリ参照を表す mdAssemblyRef メタデータトークン。
ppbPublicKeyOrTokenvoid**in公開キーまたはメタデータトークンへのポインター。
pcbPublicKeyOrTokenDWORD*inout返される公開キーまたはトークンのバイト数。
szNameLPWSTRoutoptionalアセンブリの単純名。
cchNameDWORDinszName のサイズ(ワイド文字単位)。
pchNameDWORD*inoutszName に実際に返されたワイド文字数へのポインター。
pMetaDataASSEMBLYMETADATA*inoutアセンブリメタデータを含む ASSEMBLYMETADATA 構造体へのポインター。
ppbHashValuevoid**inハッシュ値へのポインター。これは、AssemblyRefFlags 列挙体の arfFullOriginator フラグが設定されていない限り、参照対象のアセンブリの PublicKey プロパティを SHA-1 アルゴリズムでハッシュしたものです。
pcbHashValueDWORD*inout返されるハッシュ値のワイド文字数。
pdwAssemblyRefFlagsDWORD*inoutアセンブリに適用されたメタデータを記述するフラグへのポインター。フラグ値は 1 つ以上の CorAssemblyFlags 値の組み合わせです。

戻り値

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

vtbl 5 HRESULT GetFileProps(DWORD mdf, LPWSTR szName, DWORD cchName, DWORD* pchName, void** ppbHashValue, DWORD* pcbHashValue, DWORD* pdwFileFlags)

指定されたメタデータシグネチャを持つファイルのプロパティを取得します。

mdfDWORDinプロパティを取得する対象のファイルを表す mdFile メタデータトークン。
szNameLPWSTRoutoptionalファイルの単純名。
cchNameDWORDinszName のサイズ(ワイド文字単位)。
pchNameDWORD*inoutszName に実際に返されたワイド文字数。
ppbHashValuevoid**inハッシュ値へのポインター。これは、ファイルを SHA-1 アルゴリズムでハッシュしたものです。
pcbHashValueDWORD*inout返されるハッシュ値のワイド文字数。
pdwFileFlagsDWORD*inoutファイルに適用されたメタデータを記述するフラグへのポインター。フラグ値は 1 つ以上の CorFileFlags 値の組み合わせです。

戻り値

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

vtbl 6 HRESULT GetExportedTypeProps(DWORD mdct, LPWSTR szName, DWORD cchName, DWORD* pchName, DWORD* ptkImplementation, DWORD* ptkTypeDef, DWORD* pdwExportedTypeFlags)

指定されたメタデータシグネチャを持つエクスポート型のプロパティセットを取得します。

mdctDWORDinエクスポート型を表す mdExportedType メタデータトークン。
szNameLPWSTRoutoptionalエクスポート型の名前。
cchNameDWORDinszName のサイズ(ワイド文字単位)。
pchNameDWORD*inoutszName に実際に返されたワイド文字数。
ptkImplementationDWORD*inoutエクスポート型のプロパティを含む、またはそれへのアクセスを可能にする mdFilemdAssemblyRef、または mdExportedType メタデータトークン。
ptkTypeDefDWORD*inoutファイル内の型を表す mdTypeDef トークンへのポインター。
pdwExportedTypeFlagsDWORD*inoutエクスポート型に適用されたメタデータを記述するフラグへのポインター。フラグ値は 1 つ以上の CorTypeAttr 値を取ることができます。

戻り値

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

vtbl 7 HRESULT GetManifestResourceProps(DWORD mdmr, LPWSTR szName, DWORD cchName, DWORD* pchName, DWORD* ptkImplementation, DWORD* pdwOffset, DWORD* pdwResourceFlags)

指定されたメタデータシグネチャを持つマニフェストリソースのプロパティセットを取得します。

mdmrDWORDinプロパティを取得する対象のリソースを表す mdManifestResource トークン。
szNameLPWSTRoutoptionalリソースの名前。
cchNameDWORDinszName のサイズ(ワイド文字単位)。
pchNameDWORD*inoutszName に実際に返されたワイド文字数へのポインター。
ptkImplementationDWORD*inoutリソースを含むファイルまたはアセンブリをそれぞれ表す mdFile トークンまたは mdAssemblyRef トークンへのポインター。
pdwOffsetDWORD*inoutファイル内のリソースの先頭までのオフセットを指定する値へのポインター。
pdwResourceFlagsDWORD*inoutリソースに適用されたメタデータを記述するフラグへのポインター。フラグ値は 1 つ以上の CorManifestResourceFlags 値の組み合わせです。

戻り値

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

vtbl 8 HRESULT EnumAssemblyRefs(void** phEnum, DWORD* rAssemblyRefs, DWORD cMax, DWORD* pcTokens)

アセンブリマニフェスト内で定義されている mdAssemblyRef インスタンスを列挙します。

phEnumvoid**inout列挙子へのポインター。EnumAssemblyRefs メソッドを初めて呼び出すときは、これは null 値でなければなりません。
rAssemblyRefsDWORD*inoutmdAssemblyRef メタデータトークンの列挙。
cMaxDWORDinrAssemblyRefs 配列に格納できるトークンの最大数。
pcTokensDWORD*inoutrAssemblyRefs に実際に格納されたトークンの数。

戻り値

HRESULT Description
S_OK EnumAssemblyRefs が正常に返されました。
S_FALSE 列挙するトークンがありません。この場合、pcTokens は 0 に設定されます。
vtbl 9 HRESULT EnumFiles(void** phEnum, DWORD* rFiles, DWORD cMax, DWORD* pcTokens)

現在のアセンブリマニフェスト内で参照されているファイルを列挙します。

phEnumvoid**inout列挙子へのポインター。このメソッドの初回呼び出し時は null 値でなければなりません。
rFilesDWORD*inoutmdFile メタデータトークンを格納するために使用される配列。
cMaxDWORDinrFiles に格納できる mdFile トークンの最大数。
pcTokensDWORD*inoutrFiles に実際に格納された mdFile トークンの数。

戻り値

HRESULT Description
S_OK EnumFiles が正常に返されました。
S_FALSE 列挙するトークンがありません。この場合、pcTokens は 0 に設定されます。
vtbl 10 HRESULT EnumExportedTypes(void** phEnum, DWORD* rExportedTypes, DWORD cMax, DWORD* pcTokens)

現在のメタデータスコープにおいて、アセンブリマニフェスト内で参照されているエクスポート型を列挙します。

phEnumvoid**inout列挙子へのポインター。EnumExportedTypes メソッドを初めて呼び出すときは、これは null 値でなければなりません。
rExportedTypesDWORD*inoutmdExportedType メタデータトークンの列挙。
cMaxDWORDinrExportedTypes 配列に格納できる mdExportedType トークンの最大数。
pcTokensDWORD*inoutrExportedTypes に実際に格納された mdExportedType トークンの数。

戻り値

HRESULT Description
S_OK EnumExportedTypes が正常に返されました。
S_FALSE 列挙するトークンがありません。この場合、pcTokens は 0 に設定されます。
vtbl 11 HRESULT EnumManifestResources(void** phEnum, DWORD* rManifestResources, DWORD cMax, DWORD* pcTokens)

現在のアセンブリマニフェスト内で参照されているリソースの列挙子へのポインターを取得します。

phEnumvoid**inout列挙子へのポインター。EnumManifestResources メソッドを初めて呼び出すときは、これは null 値でなければなりません。
rManifestResourcesDWORD*inoutmdManifestResource メタデータトークンを格納するために使用される配列。
cMaxDWORDinrManifestResources に格納できる mdManifestResource トークンの最大数。
pcTokensDWORD*inoutrManifestResources に実際に格納された mdManifestResource トークンの数。

戻り値

HRESULT Description
S_OK EnumManifestResources が正常に返されました。
S_FALSE 列挙するトークンがありません。この場合、pcTokens は 0 に設定されます。
vtbl 12 HRESULT GetAssemblyFromScope(DWORD* ptkAssembly)

現在のスコープ内のアセンブリへのポインターを取得します。

ptkAssemblyDWORD*inout取得された、アセンブリを識別する mdAssembly トークンへのポインター。

戻り値

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

vtbl 13 HRESULT FindExportedTypeByName(LPWSTR szName, DWORD mdtExportedType, DWORD* ptkExportedType)

エクスポート型の名前とそれを囲む型を指定して、そのエクスポート型へのポインターを取得します。

szNameLPWSTRinエクスポート型の名前。
mdtExportedTypeDWORDinエクスポート型を囲むクラスのメタデータトークン。要求されたエクスポート型が入れ子型でない場合、この値は mdExportedTypeNil になります。
ptkExportedTypeDWORD*inoutエクスポート型を表す mdExportedType トークンへのポインター。

戻り値

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

解説(Remarks)

このメソッドは、参照の解決に共通言語ランタイムが用いる標準的な規則を使用します。

vtbl 14 HRESULT FindManifestResourceByName(LPWSTR szName, DWORD* ptkManifestResource)

指定された名前を持つマニフェストリソースへのポインターを取得します。

szNameLPWSTRinリソースの名前。
ptkManifestResourceDWORD*inoutmdManifestResource メタデータトークンを格納するために使用される配列。各トークンは 1 つのマニフェストリソースを表します。

戻り値

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

解説(Remarks)

このメソッドは、参照の解決に共通言語ランタイムが用いる標準的な規則を使用します。

vtbl 15 void CloseEnum(void* hEnum)

指定された列挙インスタンスへの参照を解放します。

hEnumvoid*inout閉じる対象の列挙インスタンス。
vtbl 16 HRESULT FindAssembliesByName(LPWSTR szAppBase, LPWSTR szPrivateBin, LPWSTR szAssemblyName, IUnknown** ppIUnk, DWORD cMax, DWORD* pcAssemblies)

参照の解決に共通言語ランタイム (CLR) が用いる標準的な規則を使用して、指定された名前を持つアセンブリの配列を取得します。

szAppBaseLPWSTRin指定されたアセンブリを検索するルートディレクトリ。この値が null に設定されている場合、FindAssembliesByName はグローバルアセンブリキャッシュ内のみでアセンブリを検索します。
szPrivateBinLPWSTRinルートディレクトリ配下で、アセンブリを検索するセミコロン区切りのサブディレクトリの一覧(例: "bin;bin2")。これらのディレクトリは、既定のプローブ規則で指定されたものに加えて調べられます。
szAssemblyNameLPWSTRin検索するアセンブリの名前。この文字列の形式は、AssemblyName のクラスリファレンスページで定義されています。
ppIUnkIUnknown**outIMetadataAssemblyImport インターフェイスポインターを格納する IUnknown 型の配列。
cMaxDWORDinppIUnk に格納できるインターフェイスポインターの最大数。
pcAssembliesDWORD*inout返されたインターフェイスポインターの数。つまり、ppIUnk に実際に格納されたインターフェイスポインターの数。

戻り値

HRESULT Description
S_OK FindAssembliesByName が正常に返されました。
S_FALSE アセンブリがありません。

解説(Remarks)

アセンブリ名が与えられると、FindAssembliesByName メソッドはアセンブリ参照を解決する標準的な規則に従ってアセンブリを検索します。FindAssembliesByName を使うと、呼び出し側はアプリケーションベースやプライベート検索パスなど、アセンブリリゾルバーコンテキストのさまざまな側面を構成できます。

FindAssembliesByName は、渡されたアセンブリ名に対応するアセンブリマニフェストを含むファイルへの IMetaDataImport ポインターを返します。指定されたアセンブリ名が完全に指定されていない場合(たとえばバージョンが含まれていない場合)、複数のアセンブリが返されることがあります。

FindAssembliesByName は、コンパイル時に参照アセンブリを見つけようとするコンパイラーによって一般的に使用されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。