IMetaDataEmit

更新:2007 年 11 月

提供创建、修改和保存有关当前定义的范围中的程序集的元数据的方法。可以将元数据存储在内存中,也可以将其保存到磁盘上。

interface IMetaDataEmit : IUnknown {
        
    HRESULT ApplyEditAndContinue ( 
        [in]  IUnknown    *pImport
    );
        
    HRESULT DefineCustomAttribute ( 
        [in]  mdToken     tkObj, 
        [in]  mdToken     tkType, 
        [in]  void const  *pCustomAttribute, 
        [in]  ULONG       cbCustomAttribute, 
        [out] mdCustomAttribute *pcv 
    );
        
    HRESULT DefineEvent (    
        [in]  mdTypeDef   td, 
                [in]  LPCWSTR     szEvent, 
        [in]  DWORD       dwEventFlags, 
                [in]  mdToken     tkEventType, 
        [in]  mdMethodDef mdAddOn, 
        [in]  mdMethodDef mdRemoveOn, 
        [in]  mdMethodDef mdFire, 
        [in]  mdMethodDef rmdOtherMethods[], 
        [out] mdEvent     *pmdEvent 
    );
        
    HRESULT DefineField ( 
        [in]  mdTypeDef   td, 
                [in]  LPCWSTR     szName, 
        [in]  DWORD       dwFieldFlags, 
                [in]  PCCOR_SIGNATURE pvSigBlob, 
        [in]  ULONG       cbSigBlob, 
        [in]  DWORD       dwCPlusTypeFlag, 
        [in]  void const  *pValue, 
        [in]  ULONG       cchValue, 
        [out] mdFieldDef  *pmd 
    );
        
    HRESULT DefineImportMember ( 
        [in]  IMetaDataAssemblyImport *pAssemImport, 
        [in]  const void  *pbHashValue, 
        [in]  ULONG       cbHashValue,
        [in]  IMetaDataImport *pImport, 
        [in]  mdToken     mbMember, 
        [in]  IMetaDataAssemblyEmit *pAssemEmit, 
        [in]  mdToken     tkParent, 
        [out] mdMemberRef *pmr 
    );
        
    HRESULT DefineImportType ( 
        [in]  IMetaDataAssemblyImport *pAssemImport, 
        [in]  const void  *pbHashValue, 
        [in]  ULONG       cbHashValue,  
        [in]  IMetaDataImport *pImport, 
        [in]  mdTypeDef   tdImport, 
        [in]  IMetaDataAssemblyEmit *pAssemEmit, 
        [out] mdTypeRef   *ptr
    );
        
    HRESULT DefineMemberRef ( 
        [in]  mdToken     tkImport, 
        [in]  LPCWSTR     szName, 
        [in]  PCCOR_SIGNATURE pvSigBlob, 
        [in]  ULONG       cbSigBlob, 
        [out] mdMemberRef *pmr 
    );
        
    HRESULT DefineMethod (    
        [in]  mdTypeDef   td, 
        [in]  LPCWSTR     szName, 
        [in]  DWORD       dwMethodFlags, 
        [in]  PCCOR_SIGNATURE pvSigBlob, 
        [in]  ULONG       cbSigBlob, 
        [in]  ULONG       ulCodeRVA, 
        [in]  DWORD       dwImplFlags, 
        [out] mdMethodDef *pmd
    );
        
    HRESULT DefineMethodImpl ( 
        [in]  mdTypeDef   td, 
        [in]  mdToken     tkBody, 
        [in]  mdToken     tkDecl
    );
        
    HRESULT DefineModuleRef (   
        [in]  LPCWSTR     szName, 
        [out] mdModuleRef *pmur 
    );
        
    HRESULT DefineNestedType ( 
        [in]  LPCWSTR     szTypeDef,
        [in]  DWORD       dwTypeDefFlags, 
        [in]  mdToken     tkExtends, 
        [in]  mdToken     rtkImplements[], 
        [in]  mdTypeDef   tdEncloser, 
        [out] mdTypeDef   *ptd
    );
        
    HRESULT DefineParam (
        [in]  mdMethodDef md, 
        [in]  ULONG       ulParamSeq, 
        [in]  LPCWSTR     szName, 
                [in]  DWORD       dwParamFlags, 
        [in]  DWORD       dwCPlusTypeFlag, 
                [in]  void const  *pValue,
        [in]  ULONG       cchValue, 
        [out] mdParamDef  *ppd 
    );
        
    HRESULT DefinePermissionSet (    
        [in]  mdToken     tk, 
        [in]  DWORD       dwAction, 
        [in]  void const  *pvPermission, 
        [in]  ULONG       cbPermission, 
        [out] mdPermission *ppm 
    );
        
    HRESULT DefinePinvokeMap ( 
        [in]  mdToken     tk, 
        [in]  DWORD       dwMappingFlags, 
        [in]  LPCWSTR     szImportName, 
        [in]  mdModuleRef mrImportDLL 
    );
        
    HRESULT DefineProperty ( 
        [in]  mdTypeDef   td, 
        [in]  LPCWSTR     szProperty, 
                [in]  DWORD       dwPropFlags, 
        [in]  PCCOR_SIGNATURE pvSig, 
        [in]  ULONG       cbSig, 
        [in]  DWORD       dwCPlusTypeFlag, 
                [in]  void const  *pValue, 
        [in]  ULONG       cchValue, 
        [in]  mdMethodDef mdSetter, 
        [in]  mdMethodDef mdGetter, 
        [in]  mdMethodDef rmdOtherMethods[], 
        [out] mdProperty  *pmdProp 
    );
        
    HRESULT DefineSecurityAttributeSet ( 
        [in]  mdToken     tkObj, 
        [in]  COR_SECATTR rSecAttrs[], 
        [in]  ULONG       cSecAttrs, 
        [out] ULONG       *pulErrorAttr 
    );
        
    HRESULT DefineTypeDef ( 
                [in]  LPCWSTR     szTypeDef, 
        [in]  DWORD       dwTypeDefFlags, 
                [in]  mdToken     tkExtends, 
        [in]  mdToken     rtkImplements[], 
        [out] mdTypeDef   *ptd
    );
        
    HRESULT DefineTypeRefByName ( 
        [in]  mdToken     tkResolutionScope, 
        [in]  LPCWSTR     szName, 
        [out] mdTypeRef   *ptr 
    );
        
    HRESULT DefineUserString ( 
        [in]  LPCWSTR szString, 
        [in]  ULONG       cchString, 
        [out] mdString    *pstk 
    );
        
    HRESULT DeleteClassLayout (
        [in]  mdTypeDef   td
    );
        
    HRESULT DeleteFieldMarshal (
        [in]  mdToken     tk
    );
        
    HRESULT DeletePinvokeMap ( 
        [in]  mdToken     tk 
    );
        
    HRESULT DeleteToken ( 
        [in]  mdToken     tkObj 
    );
        
    HRESULT GetSaveSize (    
        [in]  CorSaveSize fSave,
        [out] DWORD       *pdwSaveSize
    );
        
    HRESULT GetTokenFromSig (   
        [in]  PCCOR_SIGNATURE pvSig, 
        [in]  ULONG       cbSig, 
        [out] mdSignature *pmsig 
    );
        
    HRESULT GetTokenFromTypeSpec ( 
        [in]  PCCOR_SIGNATURE pvSig, 
        [in]  ULONG       cbSig, 
        [out] mdTypeSpec *ptypespec 
    ); 
        
    HRESULT Merge ( 
        [in]  IMetaDataImport *pImport, 
        [in]  IMapToken   *pHostMapToken, 
        [in]  IUnknown    *pHandler 
    );
        
    HRESULT MergeEnd ();
        
    HRESULT Save ( 
        [in]  LPCWSTR     szFile, 
        [in]  DWORD       dwSaveFlags
    );
        
    HRESULT SaveToMemory (   
        [in]  void        *pbData, 
        [in]  ULONG       cbData 
    );
        
    HRESULT SaveToStream (   
        [in]  IStream     *pIStream,
        [in]  DWORD       dwSaveFlags
    );
        
    HRESULT SetClassLayout (   
        [in]  mdTypeDef   td, 
        [in]  DWORD       dwPackSize, 
        [in]  COR_FIELD_OFFSET rFieldOffsets[], 
        [in]  ULONG       ulClassSize 
    );
        
    HRESULT SetCustomAttributeValue ( 
        [in]  mdCustomAttribute pcv, 
        [in]  void const  *pCustomAttribute,  
        [in]  ULONG       cbCustomAttribute 
    );
        
    HRESULT SetEventProps (  
        [in]  mdEvent     ev, 
        [in]  DWORD       dwEventFlags, 
        [in]  mdToken     tkEventType, 
        [in]  mdMethodDef mdAddOn, 
        [in]  mdMethodDef mdRemoveOn, 
        [in]  mdMethodDef mdFire, 
        [in]  mdMethodDef rmdOtherMethods[] 
    );
        
    HRESULT SetFieldMarshal (    
        [in]  mdToken     tk, 
        [in]  PCCOR_SIGNATURE pvNativeType, 
        [in]  ULONG       cbNativeType 
    );
        
    HRESULT SetFieldProps (  
                [in]  mdFieldDef  fd, 
        [in]  DWORD       dwFieldFlags, 
        [in]  DWORD       dwCPlusTypeFlag, 
                [in]  void const  *pValue, 
        [in]  ULONG       cchValue 
    );
        
    HRESULT SetFieldRVA ( 
        [in]  mdFieldDef  fd, 
        [in]  ULONG       ulRVA 
    );
        
    HRESULT SetHandler ( 
        [in]  IUnknown    *pUnk
    );
        
    HRESULT SetMethodProps ( 
        [in]  mdMethodDef md, 
        [in]  DWORD       dwMethodFlags,
        [in]  ULONG       ulCodeRVA, 
        [in]  DWORD       dwImplFlags 
    );
        
    HRESULT SetMethodImplFlags ( 
                [in]  mdMethodDef md, 
        [in]  DWORD       dwImplFlags 
        );
        
    HRESULT SetModuleProps ( 
        [in]  LPCWSTR     szName
    ); 
        
    HRESULT SetParamProps ( 
        [in]  mdParamDef  pd, 
        [in]  LPCWSTR     szName, 
        [in]  DWORD       dwParamFlags, 
        [in]  DWORD       dwCPlusTypeFlag, 
        [in]  void const  *pValue, 
        [in]  ULONG       cchValue 
    );
        
    HRESULT SetParent ( 
        [in]  mdMemberRef mr, 
        [in]  mdToken     tk 
    );
        
    HRESULT SetPermissionSetProps ( 
        [in]  mdToken     tk, 
        [in]  DWORD       dwAction, 
        [in]  void const  *pvPermission, 
        [in]  ULONG       cbPermission, 
        [out] mdPermission *ppm 
    );
        
    HRESULT SetPinvokeMap ( 
        [in]  mdToken     tk, 
        [in]  DWORD       dwMappingFlags,
        [in]  LPCWSTR     szImportName, 
        [in]  mdModuleRef mrImportDLL 
    );
        
    HRESULT SetPropertyProps ( 
        [in]  mdProperty  pr, 
                [in]  DWORD       dwPropFlags, 
        [in]  DWORD       dwCPlusTypeFlag, 
                [in]  void const  *pValue, 
        [in]  ULONG       cchValue, 
        [in]  mdMethodDef mdSetter, 
        [in]  mdMethodDef mdGetter, 
        [in]  mdMethodDef rmdOtherMethods[] 
    );
        
    HRESULT SetRVA ( 
        [in]  mdMethodDef md, 
        [in]  ULONG       ulRVA 
    );
        
    HRESULT SetTypeDefProps (
        [in]  mdTypeDef   td, 
                [in]  DWORD       dwTypeDefFlags, 
        [in]  mdToken     tkExtends, 
                [in]  mdToken     rtkImplements[] 
    );
        
    HRESULT TranslateSigWithScope ( 
        [in]  IMetaDataAssemblyImport *pAssemImport, 
        [in]  const void  *pbHashValue, 
        [in]  ULONG       cbHashValue, 
        [in]  IMetaDataImport *import, 
        [in]  PCCOR_SIGNATURE pbSigBlob, 
        [in]  ULONG       cbSigBlob,
        [in]  IMetaDataAssemblyEmit *pAssemEmit, 
        [in]  IMetaDataEmit *emit, 
        [out] PCOR_SIGNATURE pvTranslatedSig, 
        [in]  ULONG       cbTranslatedSigMax, 
        [out] ULONG       *pcbTranslatedSig 
    );
        
};

方法

方法

说明

IMetaDataEmit::ApplyEditAndContinue 方法

使用指定 pImport 中所做的更改来更新当前程序集范围。

IMetaDataEmit::DefineCustomAttribute 方法

创建具有指定元数据签名的自定义属性的定义,连接到指定对象并获取该自定义属性定义的标记。

IMetaDataEmit::DefineEvent 方法

为具有指定元数据签名的事件创建定义,并获取该事件定义的标记。

IMetaDataEmit::DefineField 方法

使用指定的元数据签名为字段创建定义,并获取该字段定义的标记。

IMetaDataEmit::DefineImportMember 方法

为当前范围以外的模块中所定义类型的成员创建定义,并获取该引用定义的标记。

IMetaDataEmit::DefineImportType 方法

创建在当前范围之外的模块中定义的类型的引用定义,并获取该引用定义的标记。

IMetaDataEmit::DefineMemberRef 方法

创建引用(引用当前范围之外的模块成员)的定义,并获取该引用定义的标记。

IMetaDataEmit::DefineMethod 方法

使用指定的签名创建一个方法定义,并返回该方法定义的标记。

IMetaDataEmit::DefineMethodImpl 方法

为从接口派生的方法创建其实现定义,并向该方法实现定义返回标记。

IMetaDataEmit::DefineModuleRef 方法

为具有指定名称的模块创建元数据签名。

IMetaDataEmit::DefineNestedType 方法

创建类型定义的元数据签名,并为该类型返回一个 mdTypeDef 标记,此外还指定定义的类型是 tdEncloser 所引用类型的成员。

IMetaDataEmit::DefineParam 方法

使用指定的签名为指定的标记引用的方法创建参数定义,并获取该参数定义的标记。

IMetaDataEmit::DefinePermissionSet 方法

使用指定的元数据签名创建一个权限集定义,并获取该权限集定义的标记。

IMetaDataEmit::DefinePinvokeMap 方法

为由指定标记引用的方法设置其 PInvoke 签名的功能。

IMetaDataEmit::DefineProperty 方法

使用指定的 getset 方法访问器为指定的类型创建属性定义,并获取指向该属性定义的标记。

IMetaDataEmit::DefineSecurityAttributeSet 方法

创建安全权限集,此安全权限集要附加到由指定标记引用的对象。

IMetaDataEmit::DefineTypeDef 方法

创建公共语言运行库类型的类型定义,并获取该类型定义的元数据标记。

IMetaDataEmit::DefineTypeRefByName 方法

获取在当前范围外的另一模块中定义的类型的元数据标记。

IMetaDataEmit::DefineUserString 方法

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

IMetaDataEmit::DeleteClassLayout 方法

销毁指定标记引用的类型的类布局元数据签名。

IMetaDataEmit::DeleteFieldMarshal 方法

销毁由指定标记所引用对象的 PInvoke 封送处理元数据签名。

IMetaDataEmit::DeletePinvokeMap 方法

销毁指定的标记所引用的对象的 PInvoke 映射元数据。

IMetaDataEmit::DeleteToken 方法

从当前元数据范围删除指定标记。

IMetaDataEmit::GetSaveSize 方法

获取当前范围内程序集的估计二进制大小。

IMetaDataEmit::GetTokenFromSig 方法

获取指定的元数据签名的标记。

IMetaDataEmit::GetTokenFromTypeSpec 方法

获取具有指定元数据签名的类型的元数据标记。

IMetaDataEmit::Merge 方法

将指定的导入范围添加到要合并的范围列表中。

IMetaDataEmit::MergeEnd 方法

将以前一次或多次调用 IMetaDataEmit::Merge 指定的所有元数据范围合并到当前范围。

IMetaDataEmit::Save 方法

将当前范围中的所有元数据保存到位于指定地址的文件中。

IMetaDataEmit::SaveToMemory 方法

将当前范围内的所有元数据保存到指定的内存区域。

IMetaDataEmit::SaveToStream 方法

将当前范围内的所有元数据保存到指定的 IStream 中。

IMetaDataEmit::SetClassLayout 方法

设置或更新以前调用 IMetaDataEmit::DefineTypeDef 时定义的类型的类布局签名。

IMetaDataEmit::SetCustomAttributeValue 方法

设置或更新以前调用 IMetaDataEmit::DefineCustomAttribute 时定义的自定义属性的值。

IMetaDataEmit::SetEventProps 方法

设置或更新前一个 IMetaDataEmit::DefineEvent 调用所定义的事件的指定功能。

IMetaDataEmit::SetFieldMarshal 方法

为指定标记引用的字段、方法返回或方法参数设置 PInvoke 封送处理信息。

IMetaDataEmit::SetFieldProps 方法

设置或更新指定的字段标记所引用的字段的默认值。

IMetaDataEmit::SetFieldRVA 方法

为指定标记引用的字段的相对虚拟地址设置全局变量值。

IMetaDataEmit::SetHandler 方法

设置由指定的 IUnknown 指针作为标记重新映射的通知回调引用的方法。

IMetaDataEmit::SetMethodImplFlags 方法

设置或更新指定的标记所引用的继承的方法实现的元数据签名。

IMetaDataEmit::SetMethodProps 方法

设置或更新以前调用 IMetaDataEmit::DefineMethod 时定义的方法的功能,该功能存储在指定的相对虚拟地址。

IMetaDataEmit::SetModuleProps 方法

更新对通过以前调用 IMetaDataEmit::DefineModuleRef 定义的模块的引用。

IMetaDataEmit::SetParamProps 方法

设置或更改以前调用 IMetaDataEmit::DefineParam 时定义的方法参数的功能。

IMetaDataEmit::SetParent 方法

使以前通过调用 IMetaDataEmit::DefineMemberRef 定义的指定成员成为以前通过调用 IMetaDataEmit::DefineTypeDef 定义的指定类型的成员。

IMetaDataEmit::SetPermissionSetProps 方法

设置或更新权限集的元数据签名的功能,该权限集通过对 IMetaDataEmit::DefinePermissionSet 的前一个调用而定义。

IMetaDataEmit::SetPinvokeMap 方法

设置或更改通过以前调用 IMetaDataEmit::DefinePinvokeMap 所定义的方法的 PInvoke 签名。

IMetaDataEmit::SetPropertyProps 方法

设置以前调用 IMetaDataEmit::DefineProperty 时定义的属性的元数据中存储的功能。

IMetaDataEmit::SetRVA 方法

设置指定方法的相对虚拟地址。

IMetaDataEmit::SetTypeDefProps 方法

设置前一次 IMetaDataEmit::DefineTypeDef 调用所定义的类型的功能。

IMetaDataEmit::TranslateSigWithScope 方法

将程序集导入当前范围并获取合并的范围的新的元数据签名。

要求

**平台:**请参见 .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

请参见

参考

IMetaDataEmit2

其他资源

元数据接口