我正在尝试实现托管调试器,查看MDBG示例。目前,我正试图使用IMetaDataImport获取基类层次结构方法。
我正在使用的EnumMethods枚举表示指定类型的方法的MethodDef令牌。但是我想枚举类层次结构中的所有方法。为此,我使用GetTypeDefProps,它返回ptkExtends,这是表示基类的令牌。问题是基类可以用TypeDef、TypeRef或TypeSpec表示。
如何从相对的TypeDef获得基类TypeSpec?
我读过ECMA第二部分的说明书,但对我没有多大帮助.
到目前为止,我得到的是:
int size;
TypeAttributes pdwTypeDefFlags;
m_importer.GetTypeDefProps(m_typeToken,
null,
0,
out size,
out pdwTypeDefFlags,
out ptkExtends
);
//ptkExtends is correct TypeSpec token
IntPtr ppvSig;
uint pcbSig;
m_importer.GetTypeSpecFromToken(ptkExtends, out ppvSig, out pcbSig);
//I'm getting the TypeSpec Blob signature in ppvSig, how to use it to get TypeDef?!发布于 2016-07-27 14:41:41
如前所述,TypeSpec格式在Partition第23.2.14节中定义,其表示方式类似于EBNF,其终端在23.1.16节中定义。
TypeSpec可以表示一系列不同类型的类型,但对基类来说唯一有意义的是GENERICINST (封闭泛型类型)。
TypeSpecBlob ::= GENERICINST (CLASS | VALUETYPE) TypeDefOrRefEncoded GenArgCount Type Type*
| ...TypeDefOrRefEncoded在23.2.8节中定义,压缩整数在第23.2节的开头定义,Type在23.2.12节中定义。
Type ::= CLASS TypeDefOrRefEncoded
| VALUETYPE TypeDefOrRefEncoded
| ...考虑到前面示例(15 12 3C 01 12 36)中的字节,我的“餐巾纸背面”抓取的结果如下:
15 // GENERICINST
12 // CLASS
3C // TypeDefOrRefEncoded = 0200000F (The TypeDef of the open generic type.)
01 // GenArgCount = 1
12 // CLASS
36 // TypeDefOrRefEncoded = 0100000D (The TypeRef of the single type argument.)https://stackoverflow.com/questions/38615100
复制相似问题