Я построил пользовательский IL Rewriter, который вводит пользовательский код в некоторые методы. Часть этой инъекции, я хочу создать экземпляр объекта List<int>
, Я уже нашел mdTokenRef для списка ~ 1.
Как определить или получить TypeSpec из этого mdTokenRef? Я мог бы определить TypeSpecBlog, как показано ниже для этого. Но, ища API ICorProfiler, чтобы найти TypeSpec.
COR_SIGNATURE sigListInt[] = { ELEMENT_TYPE_GENERICINST, ELEMENT_TYPE_CLASS, tdList, 0x01, ELEMENT_TYPE_I1 };
Вы не можете определить TypeSpec из mdTokenRef, но вы можете использовать объект IMetaDataEmit и определить свой TypeSpec с помощью функции GetTokenFromTypeSpec.
Чтобы получить объект IMetaDataEmit, вы можете использовать IMetaDataImport, который предоставляет функцию QueryInterface
IMetaDataImport* mdImport;
....
IMetaDataEmit* mdEmit;
HRESULT hr = mdImport->QueryInterface(IID_IMetaDataEmit, (void**)&mdEmit);
Других решений пока нет …