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
);
};
方法
方法 |
說明 |
---|---|
以指定控制代碼關閉列舉值。 |
|
取得具有指定控制代碼的列舉值內的項目數。 |
|
列舉與指定之型別或成員有關聯的自訂屬性定義語彙基元的清單。 |
|
列舉指定之 TypeDef 語彙基元的事件定義語彙基元。 |
|
列舉指定之 TypeDef 語彙基元所參考型別的 FieldDef 語彙基元。 |
|
以指定名稱列舉指定之型別的 FieldDef 語彙基元。 |
|
列舉表示介面實作的 MethodDef 語彙基元。 |
|
列舉 MemberRef 語彙基元,表示指定之型別的成員。 |
|
列舉 MemberDef 語彙基元,表示指定之型別的成員。 |
|
以指定名稱列舉 MemberDef 語彙基元,表示指定之型別的成員。 |
|
列舉 MethodBody 和 MethodDeclaration 語彙基元,表示指定之型別的方法。 |
|
列舉 MethodDef 語彙基元,表示指定之型別的方法。 |
|
列舉與指定之方法相關的屬性和屬性變更事件。 |
|
列舉具有指定之名稱,而且由指定之 TypeDef 語彙基元所參考之型別定義的方法。 |
|
列舉表示已匯入之模組的 ModuleRef 語彙基元。 |
|
列舉 ParamDef 語彙基元,表示指定之 MethodDef 語彙基元所參考方法的參數。 |
|
列舉指定之中繼資料範圍中物件的使用權限。 |
|
列舉 PropertyDef 語彙基元,表示指定之 TypeDef 語彙基元所參考型別的屬性。 |
|
列舉 Signature 語彙基元,表示目前範圍中的獨立簽章。 |
|
列舉 TypeDef 語彙基元,表示目前範圍中的所有型別。 |
|
列舉目前中繼資料範圍中定義的 TypeRef 語彙基元。 |
|
列舉目前中繼資料範圍中定義的 TypeSpec 語彙基元。 |
|
列舉 MemberDef 語彙基元,表示目前中繼資料範圍中無法解析的方法。 |
|
列舉 String 語彙基元,表示目前中繼資料範圍中的硬式編碼字串。 |
|
針對屬於指定型別的成員以及具有指定名稱和中繼資料簽章的欄位取得 FieldDef 語彙基元。 |
|
以指定的名稱和中繼資料簽章,取得由指定之型別所定義之成員的 MemberDef 語彙基元指標。 |
|
以指定名稱和中繼資料簽章,取得指定之型別所定義成員的 MemberRef 語彙基元指標。 |
|
以指定名稱和中繼資料簽章,取得指定之型別所定義方法的 MethodDef 語彙基元指標。 |
|
以指定名稱,取得型別的 TypeDef 中繼資料語彙基元指標。 |
|
以指定的名稱,取得 TypeRef 中繼資料語彙基元的指標,此語彙基元會參考指定之範圍內的型別。 |
|
取得指定 TypeDef 語彙基元所參考類別的配置資訊。 |
|
根據指定名稱取得自訂屬性的值。 |
|
根據指定的中繼資料語彙基元,取得自訂屬性的值。 |
|
針對指定之事件語彙基元所表示的事件,取得中繼資料資訊,包括宣告型別、委派的加入和移除方法,以及任何旗標和其他相關資料。 |
|
取得一個指向由特定欄位中繼資料語彙基元所表示的原生、Unmanaged 型別欄位的指標。 |
|
取得與指定 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