我已经构建了自定义IL重写器,将自定义代码注入某些方法。该注入的一部分,我想实例化List<int>
的对象。我已经找到了列表〜1的mdtokenref。
在此mdtokenref中,如何定义或获取Typespec?我可以定义打字机,如下所示。但是,寻找iCorprofiler API查找Typespec。
COR_SIGNATURE sigListInt[] = { ELEMENT_TYPE_GENERICINST, ELEMENT_TYPE_CLASS, tdList, 0x01, ELEMENT_TYPE_I1 };
您无法从mdtokenref定义Typespec,但是您可以使用imetadataemit对象并通过getTokenFromTypespecece来定义您的Typespec。
要获取imetadataemit对象,您可以使用imetadataimport,可提供查询函数
IMetaDataImport* mdImport;
....
IMetaDataEmit* mdEmit;
HRESULT hr = mdImport->QueryInterface(IID_IMetaDataEmit, (void**)&mdEmit);