从TypeRef为.Net IL定义TypeSpec

时间:2017-12-19 16:25:42

标签: c++ .net metadata clr-profiling-api

我已经构建了自定义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 };

1 个答案:

答案 0 :(得分:0)

您无法从mdTokenRef定义TypeSpec,但您可以使用IMetaDataEmit对象并通过GetTokenFromTypeSpec函数定义TypeSpec。

要获取IMetaDataEmit对象,可以使用提供QueryInterface函数的IMetaDataImport

IMetaDataImport* mdImport;
....
IMetaDataEmit* mdEmit;
HRESULT hr = mdImport->QueryInterface(IID_IMetaDataEmit, (void**)&mdEmit);