更新:2007 年 11 月
提供从可移植可执行 (PE) 文件或其他源(如类型库或独立的运行时元数据二进制文件)导入和操作现有元数据的方法。
interface IMetaDataImport : IUnknown {
HRESULT CloseEnum (
HCORENUM hEnum
);
HRESULT CountEnum (
HCORENUM hEnum,
ULONG *pulCount
);
HRESULT EnumCustomAttributes (
HCORENUM *phEnum,
mdToken tk,
mdToken tkType,
mdCustomAttribute rCustomAttributes[],
ULONG cMax,
ULONG *pcCustomAttributes
);
HRESULT EnumEvents (
HCORENUM *phEnum,
mdTypeDef td,
mdEvent rEvents[],
ULONG cMax,
ULONG *pcEvents
);
HRESULT EnumFields (
HCORENUM *phEnum,
mdTypeDef cl,
mdFieldDef rFields[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumFieldsWithName (
HCORENUM *phEnum,
mdTypeDef cl,
LPCWSTR szName,
mdFieldDef rFields[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumInterfaceImpls (
HCORENUM *phEnum,
mdTypeDef td,
mdInterfaceImpl rImpls[],
ULONG cMax,
ULONG* pcImpls
);
HRESULT EnumMemberRefs (
HCORENUM *phEnum,
mdToken tkParent,
mdMemberRef rMemberRefs[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumMembers (
HCORENUM *phEnum,
mdTypeDef cl,
mdToken rMembers[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumMembersWithName (
HCORENUM *phEnum,
mdTypeDef cl,
LPCWSTR szName,
mdToken rMembers[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumMethodImpls (
HCORENUM *phEnum,
mdTypeDef td,
mdToken rMethodBody[],
mdToken rMethodDecl[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumMethods (
HCORENUM *phEnum,
mdTypeDef cl,
mdMethodDef rMethods[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumMethodSemantics (
HCORENUM *phEnum,
mdMethodDef mb,
mdToken rEventProp[],
ULONG cMax,
ULONG *pcEventProp
);
HRESULT EnumMethodsWithName (
HCORENUM *phEnum,
mdTypeDef cl,
LPCWSTR szName,
mdMethodDef rMethods[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumModuleRefs (
HCORENUM *phEnum,
mdModuleRef rModuleRefs[],
ULONG cMax,
ULONG *pcModuleRefs
);
HRESULT EnumParams (
HCORENUM *phEnum,
mdMethodDef mb,
mdParamDef rParams[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumPermissionSets
HCORENUM *phEnum,
mdToken tk,
DWORD dwActions,
mdPermission rPermission[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumProperties (
HCORENUM *phEnum,
mdTypeDef td,
mdProperty rProperties[],
ULONG cMax,
ULONG *pcProperties
);
HRESULT EnumSignatures (
HCORENUM *phEnum,
mdSignature rSignatures[],
ULONG cMax,
ULONG *pcSignatures
);
HRESULT EnumTypeDefs (
HCORENUM *phEnum,
mdTypeDef rTypeDefs[],
ULONG cMax,
ULONG *pcTypeDefs
);
HRESULT EnumTypeRefs (
HCORENUM *phEnum,
mdTypeRef rTypeRefs[],
ULONG cMax,
ULONG *pcTypeRefs
);
HRESULT EnumTypeSpecs (
HCORENUM *phEnum,
mdTypeSpec rTypeSpecs[],
ULONG cMax,
ULONG *pcTypeSpecs
);
HRESULT EnumUnresolvedMethods (
HCORENUM *phEnum,
mdToken rMethods[],
ULONG cMax,
ULONG *pcTokens
);
HRESULT EnumUserStrings (
HCORENUM *phEnum,
mdString rStrings[],
ULONG cMax,
ULONG *pcStrings
);
HRESULT FindField (
mdTypeDef td,
LPCWSTR szName,
PCCOR_SIGNATURE pvSigBlob,
ULONG cbSigBlob,
mdFieldDef *pmb
);
HRESULT FindMember (
mdTypeDef td,
LPCWSTR szName,
PCCOR_SIGNATURE pvSigBlob,
ULONG cbSigBlob,
mdToken *pmb
);
HRESULT FindMemberRef (
mdTypeRef td,
LPCWSTR szName,
PCCOR_SIGNATURE pvSigBlob,
ULONG cbSigBlob,
mdMemberRef *pmr
);
HRESULT FindMethod (
mdTypeDef td,
LPCWSTR szName,
PCCOR_SIGNATURE pvSigBlob,
ULONG cbSigBlob,
mdMethodDef *pmb
);
HRESULT FindTypeDefByName
LPCWSTR szTypeDef,
mdToken tkEnclosingClass,
mdTypeDef *ptd
);
HRESULT FindTypeRef (
mdToken tkResolutionScope,
LPCWSTR szName,
mdTypeRef *ptr
);
HRESULT GetClassLayout (
mdTypeDef td,
DWORD *pdwPackSize,
COR_FIELD_OFFSET rFieldOffset[],
ULONG cMax,
ULONG *pcFieldOffset,
ULONG *pulClassSize
);
HRESULT GetCustomAttributeByName (
mdToken tkObj,
LPCWSTR szName,
const void **ppData,
ULONG *pcbData
);
HRESULT GetCustomAttributeProps (
mdCustomAttribute cv,
mdToken *ptkObj,
mdToken *ptkType,
void const **ppBlob,
ULONG *pcbSize
);
HRESULT GetEventProps (
mdEvent ev,
mdTypeDef *pClass,
LPCWSTR szEvent,
ULONG cchEvent,
ULONG *pchEvent,
DWORD *pdwEventFlags,
mdToken *ptkEventType,
mdMethodDef *pmdAddOn,
mdMethodDef *pmdRemoveOn,
mdMethodDef *pmdFire,
mdMethodDef rmdOtherMethod[],
ULONG cMax,
ULONG *pcOtherMethod
);
HRESULT GetFieldMarshal (
mdToken tk,
PCCOR_SIGNATURE *ppvNativeType,
ULONG *pcbNativeType
);
HRESULT GetFieldProps (
mdFieldDef mb,
mdTypeDef *pClass,
LPWSTR szField,
ULONG cchField,
ULONG *pchField,
DWORD *pdwAttr,
PCCOR_SIGNATURE *ppvSigBlob,
ULONG *pcbSigBlob,
DWORD *pdwCPlusTypeFlag,
UVCP_CONSTANT *ppValue,
ULONG *pcchValue
);
HRESULT GetInterfaceImplProps (
mdInterfaceImpl iiImpl,
mdTypeDef *pClass,
mdToken *ptkIface)
);
HRESULT GetMemberProps (
mdToken mb,
mdTypeDef *pClass,
LPWSTR szMember,
ULONG cchMember,
ULONG *pchMember,
DWORD *pdwAttr,
PCCOR_SIGNATURE *ppvSigBlob,
ULONG *pcbSigBlob,
ULONG *pulCodeRVA,
DWORD *pdwImplFlags,
DWORD *pdwCPlusTypeFlag,
UVCP_CONSTANT *ppValue,
ULONG *pcchValue
);
HRESULT GetMemberRefProps (
mdMemberRef mr,
mdToken *ptk,
LPWSTR szMember,
ULONG cchMember,
ULONG *pchMember,
PCCOR_SIGNATURE *ppvSigBlob,
ULONG *pbSig
);
HRESULT GetMethodProps (
mdMethodDef mb,
mdTypeDef *pClass,
LPWSTR szMethod,
ULONG cchMethod,
ULONG *pchMethod,
DWORD *pdwAttr,
PCCOR_SIGNATURE *ppvSigBlob,
ULONG *pcbSigBlob,
ULONG *pulCodeRVA,
DWORD *pdwImplFlags
);
HRESULT GetMethodSemantics (
mdMethodDef mb,
mdToken tkEventProp,
DWORD *pdwSemanticsFlags
);
HRESULT GetModuleFromScope (
mdModule *pmd
);
HRESULT GetModuleRefProps (
mdModuleRef mur,
LPWSTR szName,
ULONG cchName,
ULONG *pchName
);
HRESULT GetNameFromToken (
mdToken tk,
MDUTF8CSTR *pszUtf8NamePtr
);
HRESULT GetNativeCallConvFromSig (
void const *pvSig,
ULONG cbSig,
ULONG *pCallConv
);
HRESULT GetNestedClassProps (
mdTypeDef tdNestedClass,
mdTypeDef *ptdEnclosingClass
);
HRESULT GetParamForMethodIndex (
mdMethodDef md,
ULONG ulParamSeq,
mdParamDef *ppd
);
HRESULT GetParamProps (
mdParamDef tk,
mdMethodDef *pmd,
ULONG *pulSequence,
LPWSTR szName,
ULONG cchName,
ULONG *pchName,
DWORD *pdwAttr,
DWORD *pdwCPlusTypeFlag,
UVCP_CONSTANT *ppValue,
ULONG *pcchValue
);
HRESULT GetPermissionSetProps (
mdPermission pm,
DWORD *pdwAction,
void const **ppvPermission,
ULONG *pcbPermission
);
HRESULT GetPinvokeMap (
mdToken tk,
DWORD *pdwMappingFlags,
LPWSTR szImportName,
ULONG cchImportName,
ULONG *pchImportName,
mdModuleRef *pmrImportDLL
);
HRESULT GetPropertyProps (
mdProperty prop,
mdTypeDef *pClass,
LPCWSTR szProperty,
ULONG cchProperty,
ULONG *pchProperty,
DWORD *pdwPropFlags,
PCCOR_SIGNATURE *ppvSig,
ULONG *pbSig,
DWORD *pdwCPlusTypeFlag,
UVCP_CONSTANT *ppDefaultValue,
ULONG *pcchDefaultValue,
mdMethodDef *pmdSetter,
mdMethodDef *pmdGetter,
mdMethodDef rmdOtherMethod[],
ULONG cMax,
ULONG *pcOtherMethod
);
HRESULT GetRVA (
mdToken tk,
ULONG *pulCodeRVA,
DWORD *pdwImplFlags
);
HRESULT GetScopeProps (
LPWSTR szName,
ULONG cchName,
ULONG *pchName,
GUID *pmvid
);
HRESULT GetSigFromToken (
mdSignature mdSig,
PCCOR_SIGNATURE *ppvSig,
ULONG *pcbSig
);
HRESULT GetTypeDefProps
mdTypeDef td,
LPWSTR szTypeDef,
ULONG cchTypeDef,
ULONG *pchTypeDef,
DWORD *pdwTypeDefFlags,
mdToken *ptkExtends
);
HRESULT GetTypeRefProps (
mdTypeRef tr,
mdToken *ptkResolutionScope,
LPWSTR szName,
ULONG cchName,
ULONG *pchName
);
HRESULT GetTypeSpecFromToken (
mdTypeSpec typespec,
PCCOR_SIGNATURE *ppvSig,
ULONG *pcbSig
);
HRESULT GetUserString (
mdString stk,
LPWSTR szString,
ULONG cchString,
ULONG *pchString
);
HRESULT IsGlobal (
mdToken pd,
int *pbGlobal
);
BOOL IsValidToken (
mdToken tk
);
HRESULT ResetEnum (
HCORENUM hEnum,
ULONG ulPos
);
HRESULT ResolveTypeRef (
mdTypeRef tr,
REFIID riid,
IUnknown **ppIScope,
mdTypeDef *ptd
);
};
方法
方法 |
说明 |
---|---|
关闭具有指定句柄的枚举数。 |
|
获取具有指定句柄的枚举数中的元素数。 |
|
枚举与指定的类型或成员关联的自定义属性定义标记的列表。 |
|
枚举指定的 TypeDef 标记的事件定义标记。 |
|
枚举指定的 TypeDef 标记所引用的类型的 FieldDef 标记。 |
|
枚举具有指定名称的指定类型的 FieldDef 标记。 |
|
枚举表示接口实现的 MethodDef 标记。 |
|
枚举表示指定类型的成员的 MemberRef 标记。 |
|
枚举表示指定类型的成员的 MemberDef 标记。 |
|
枚举表示指定类型(具有指定名称)的成员的 MemberDef 标记。 |
|
枚举表示指定类型的方法的 MethodBody 和 MethodDeclaration 标记。 |
|
枚举表示指定类型的方法的 MethodDef 标记。 |
|
枚举与指定方法相关的属性和属性更改事件。 |
|
枚举具有指定名称并且由指定的 TypeDef 标记所引用的类型定义的方法。 |
|
枚举表示导入的模块的 ModuleRef 标记。 |
|
枚举 ParamDef 标记,这些标记表示指定的 MethodDef 标记所引用的方法的参数。 |
|
枚举指定的元数据范围内的对象的权限。 |
|
枚举表示由指定 TypeDef 标记所引用的类型的属性的 PropertyDef 标记。 |
|
枚举当前范围内表示独立签名的 Signature 标记。 |
|
枚举表示当前范围内的所有类型的 TypeDef 标记。 |
|
枚举在当前元数据范围内定义的 TypeRef 标记。 |
|
枚举当前元数据范围内定义的 TypeSpec 标记。 |
|
枚举表示当前元数据范围内未解析的方法的 MemberDef 标记。 |
|
枚举表示当前元数据范围内的硬编码字符串的 String 标记。 |
|
获取属于指定类型的成员并具有指定的名称和元数据签名的字段的 FieldDef 标记。 |
|
获取一个指向成员的 MemberDef 标记的指针,该成员由指定的类型定义,并且具有指定的名称和元数据签名。 |
|
获取一个指向成员的 MemberRef 标记的指针,该成员由指定的类型定义,并且具有指定的名称和元数据签名。 |
|
获取一个指向方法的 MethodDef 标记的指针,该方法由指定的类型定义,并且具有指定的名称和元数据签名。 |
|
获取一个指向具有指定名称的类型的 TypeDef 元数据标记的指针。 |
|
获取一个指向 TypeRef 元数据标记的指针,该标记通过指定的名称在指定搜索范围内引用类型。 |
|
获取由指定的 TypeDef 标记所引用类的布局信息。 |
|
已知自定义属性名称时获取该属性的值。 |
|
在给定自定义属性的元数据标记的情况下获取自定义属性的值。 |
|
对于指定的事件标记表示的事件,获取元数据信息,包括声明类型、委托的添加和移除方法、任何标志及其他关联数据。 |
|
获取一个指针,该指针指向由指定的字段元数据标记表示的字段的本机非托管类型。 |
|
获取与指定 FieldDef 标记引用的字段关联的元数据。 |
|
对于实现指定方法的类型和声明该方法的接口,获取一个指向其元数据标记的指针。 |
|
获取指定的元数据标记所引用的类型成员的元数据信息,包括名称、二进制签名和相对虚拟地址。 |
|
获取与指定标记引用的成员关联的元数据。 |
|
获取与指定的 MethodDef 标记引用的方法关联的元数据。 |
|
获取一个指针,该指针指向方法(由指定的 MethodDef 标记引用)与成对属性和事件(由指定的 EventProp 标记引用)之间的关系。 |
|
获取指向当前元数据范围内所引用模块的元数据标记的指针。 |
|
获取指定元数据标记引用的模块的名称。 |
|
获取指定的元数据标记所引用的对象的 UTF-8 名称。 |
|
获取指定的签名指针所表示的方法的本机调用约定。 |
|
获取指定的嵌套类型的封闭父类型的 TypeDef 标记。 |
|
获取一个指向标记的指针,此标记表示在指定的 MethodDef 标记表示的方法的方法参数序列中位于指定序号位置的参数。 |
|
获取指定的 ParamDef 标记所引用的参数的元数据值。 |
|
获取与指定的 Permission 标记所表示的 System.Security.PermissionSet 关联的元数据。 |
|
获取用于表示 PInvoke 调用的目标程序集的 ModuleRef 标记。 |
|
获取与指定的标记表示的属性关联的元数据。 |
|
获取由指定标记表示的代码对象的相对虚拟地址的偏移量。 |
|
获取当前元数据范围内的程序集或模块的名称和版本标识符(可选)。 |
|
获取与指定标记关联的二进制元数据签名。 |
|
返回由指定的 TypeDef 标记表示的类型的元数据信息。 |
|
获取与指定的 TypeRef 标记所引用的类型关联的元数据。 |
|
获取由指定的标记表示的类型规范的二进制元数据签名。 |
|
获取指定元数据标记表示的文字字符串。 |
|
获取一个值,该值指示由指定的元数据标记表示的字段、方法或类型是否具有全局范围。 |
|
获取指示指定的标记是否包含对代码对象的有效引用的值。 |
|
将指定的枚举数重置到指定位置。 |
|
获取指定的 TypeRef 标记所引用的类型的类型信息。 |
备注
IMetaDataImport 接口的设计主要供将要导入类型信息(例如,开发工具)或管理已部署组件(例如,解析/激活服务)的工具和服务使用。IMetaDataImport 中的方法属于下列任务类别:
枚举元数据范围内的项集合。
查找具有特定特征集的项。
获取指定项的属性。
Get 方法专门用来返回元数据项的单值属性。当该属性是对另一个项的引用时,将返回该项的标记。任何指针输入类型都可为 NULL,以指示未请求特定值。若要获取基本上由集合对象(例如,某个类实现的接口集合)构成的属性,请使用枚举方法。
要求
**平台:**请参见 .NET Framework 系统要求。
**头文件:**Cor.h
**库:**在 MsCorEE.dll 中用作资源
**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0