IMetaDataImport

更新: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
    );
        
};

方法

方法

说明

IMetaDataImport::CloseEnum 方法

关闭具有指定句柄的枚举数。

IMetaDataImport::CountEnum 方法

获取具有指定句柄的枚举数中的元素数。

IMetaDataImport::EnumCustomAttributes 方法

枚举与指定的类型或成员关联的自定义属性定义标记的列表。

IMetaDataImport::EnumEvents 方法

枚举指定的 TypeDef 标记的事件定义标记。

IMetaDataImport::EnumFields 方法

枚举指定的 TypeDef 标记所引用的类型的 FieldDef 标记。

IMetaDataImport::EnumFieldsWithName 方法

枚举具有指定名称的指定类型的 FieldDef 标记。

IMetaDataImport::EnumInterfaceImpls 方法

枚举表示接口实现的 MethodDef 标记。

IMetaDataImport::EnumMemberRefs 方法

枚举表示指定类型的成员的 MemberRef 标记。

IMetaDataImport::EnumMembers 方法

枚举表示指定类型的成员的 MemberDef 标记。

IMetaDataImport::EnumMembersWithName 方法

枚举表示指定类型(具有指定名称)的成员的 MemberDef 标记。

IMetaDataImport::EnumMethodImpls 方法

枚举表示指定类型的方法的 MethodBody 和 MethodDeclaration 标记。

IMetaDataImport::EnumMethods 方法

枚举表示指定类型的方法的 MethodDef 标记。

IMetaDataImport::EnumMethodSemantics 方法

枚举与指定方法相关的属性和属性更改事件。

IMetaDataImport::EnumMethodsWithName 方法

枚举具有指定名称并且由指定的 TypeDef 标记所引用的类型定义的方法。

IMetaDataImport::EnumModuleRefs 方法

枚举表示导入的模块的 ModuleRef 标记。

IMetaDataImport::EnumParams 方法

枚举 ParamDef 标记,这些标记表示指定的 MethodDef 标记所引用的方法的参数。

IMetaDataImport::EnumPermissionSets 方法

枚举指定的元数据范围内的对象的权限。

IMetaDataImport::EnumProperties 方法

枚举表示由指定 TypeDef 标记所引用的类型的属性的 PropertyDef 标记。

IMetaDataImport::EnumSignatures 方法

枚举当前范围内表示独立签名的 Signature 标记。

IMetaDataImport::EnumTypeDefs 方法

枚举表示当前范围内的所有类型的 TypeDef 标记。

IMetaDataImport::EnumTypeRefs 方法

枚举在当前元数据范围内定义的 TypeRef 标记。

IMetaDataImport::EnumTypeSpecs 方法

枚举当前元数据范围内定义的 TypeSpec 标记。

IMetaDataImport::EnumUnresolvedMethods 方法

枚举表示当前元数据范围内未解析的方法的 MemberDef 标记。

IMetaDataImport::EnumUserStrings 方法

枚举表示当前元数据范围内的硬编码字符串的 String 标记。

IMetaDataImport::FindField 方法

获取属于指定类型的成员并具有指定的名称和元数据签名的字段的 FieldDef 标记。

IMetaDataImport::FindMember 方法

获取一个指向成员的 MemberDef 标记的指针,该成员由指定的类型定义,并且具有指定的名称和元数据签名。

IMetaDataImport::FindMemberRef 方法

获取一个指向成员的 MemberRef 标记的指针,该成员由指定的类型定义,并且具有指定的名称和元数据签名。

IMetaDataImport::FindMethod 方法

获取一个指向方法的 MethodDef 标记的指针,该方法由指定的类型定义,并且具有指定的名称和元数据签名。

IMetaDataImport::FindTypeDefByName 方法

获取一个指向具有指定名称的类型的 TypeDef 元数据标记的指针。

IMetaDataImport::FindTypeRef 方法

获取一个指向 TypeRef 元数据标记的指针,该标记通过指定的名称在指定搜索范围内引用类型。

IMetaDataImport::GetClassLayout 方法

获取由指定的 TypeDef 标记所引用类的布局信息。

IMetaDataImport::GetCustomAttributeByName 方法

已知自定义属性名称时获取该属性的值。

IMetaDataImport::GetCustomAttributeProps 方法

在给定自定义属性的元数据标记的情况下获取自定义属性的值。

IMetaDataImport::GetEventProps 方法

对于指定的事件标记表示的事件,获取元数据信息,包括声明类型、委托的添加和移除方法、任何标志及其他关联数据。

IMetaDataImport::GetFieldMarshal 方法

获取一个指针,该指针指向由指定的字段元数据标记表示的字段的本机非托管类型。

IMetaDataImport::GetFieldProps 方法

获取与指定 FieldDef 标记引用的字段关联的元数据。

IMetaDataImport::GetInterfaceImplProps 方法

对于实现指定方法的类型和声明该方法的接口,获取一个指向其元数据标记的指针。

IMetaDataImport::GetMemberProps 方法

获取指定的元数据标记所引用的类型成员的元数据信息,包括名称、二进制签名和相对虚拟地址。

IMetaDataImport::GetMemberRefProps 方法

获取与指定标记引用的成员关联的元数据。

IMetaDataImport::GetMethodProps 方法

获取与指定的 MethodDef 标记引用的方法关联的元数据。

IMetaDataImport::GetMethodSemantics 方法

获取一个指针,该指针指向方法(由指定的 MethodDef 标记引用)与成对属性和事件(由指定的 EventProp 标记引用)之间的关系。

IMetaDataImport::GetModuleFromScope 方法

获取指向当前元数据范围内所引用模块的元数据标记的指针。

IMetaDataImport::GetModuleRefProps 方法

获取指定元数据标记引用的模块的名称。

IMetaDataImport::GetNameFromToken 方法

获取指定的元数据标记所引用的对象的 UTF-8 名称。

IMetaDataImport::GetNativeCallConvFromSig 方法

获取指定的签名指针所表示的方法的本机调用约定。

IMetaDataImport::GetNestedClassProps 方法

获取指定的嵌套类型的封闭父类型的 TypeDef 标记。

IMetaDataImport::GetParamForMethodIndex 方法

获取一个指向标记的指针,此标记表示在指定的 MethodDef 标记表示的方法的方法参数序列中位于指定序号位置的参数。

IMetaDataImport::GetParamProps 方法

获取指定的 ParamDef 标记所引用的参数的元数据值。

IMetaDataImport::GetPermissionSetProps 方法

获取与指定的 Permission 标记所表示的 System.Security.PermissionSet 关联的元数据。

IMetaDataImport::GetPinvokeMap 方法

获取用于表示 PInvoke 调用的目标程序集的 ModuleRef 标记。

IMetaDataImport::GetPropertyProps 方法

获取与指定的标记表示的属性关联的元数据。

IMetaDataImport::GetRVA 方法

获取由指定标记表示的代码对象的相对虚拟地址的偏移量。

IMetaDataImport::GetScopeProps 方法

获取当前元数据范围内的程序集或模块的名称和版本标识符(可选)。

IMetaDataImport::GetSigFromToken 方法

获取与指定标记关联的二进制元数据签名。

IMetaDataImport::GetTypeDefProps 方法

返回由指定的 TypeDef 标记表示的类型的元数据信息。

IMetaDataImport::GetTypeRefProps 方法

获取与指定的 TypeRef 标记所引用的类型关联的元数据。

IMetaDataImport::GetTypeSpecFromToken 方法

获取由指定的标记表示的类型规范的二进制元数据签名。

IMetaDataImport::GetUserString 方法

获取指定元数据标记表示的文字字符串。

IMetaDataImport::IsGlobal 方法

获取一个值,该值指示由指定的元数据标记表示的字段、方法或类型是否具有全局范围。

IMetaDataImport::IsValidToken 方法

获取指示指定的标记是否包含对代码对象的有效引用的值。

IMetaDataImport::ResetEnum 方法

将指定的枚举数重置到指定位置。

IMetaDataImport::ResolveTypeRef 方法

获取指定的 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

请参见

参考

IMetaDataImport2

其他资源

元数据接口

元数据概述