我已经构建了自定义IL重写器,可以将自定义代码注入到某些方法中。这个注入的一部分,我想实例化List<int>
的对象。我已经为List~1找到了mdTokenRef。
从这个mdTokenRef,我如何定义或获取TypeSpec?我可以为此定义TypeSpecBlog,如下所示。但是,寻找ICorProfiler API来查找TypeSpec。
COR_SIGNATURE sigListInt[] = { ELEMENT_TYPE_GENERICINST, ELEMENT_TYPE_CLASS, tdList, 0x01, ELEMENT_TYPE_I1 };
答案 0 :(得分:0)
您无法从mdTokenRef定义TypeSpec,但您可以使用IMetaDataEmit对象并通过GetTokenFromTypeSpec函数定义TypeSpec。
要获取IMetaDataEmit对象,可以使用提供QueryInterface函数的IMetaDataImport
IMetaDataImport* mdImport;
....
IMetaDataEmit* mdEmit;
HRESULT hr = mdImport->QueryInterface(IID_IMetaDataEmit, (void**)&mdEmit);