我正在尝试使用C#的DIA SDK检查.pdb,但无法使用以下代码获取用户定义的类型:
string pdbFileName = @"c:\test.pdb";
var sourceClass = new DiaSourceClass();
sourceClass.loadDataFromPdb(pdbFileName);
IDiaSession session;
sourceClass.openSession(out session);
IDiaEnumSymbols symbols;
session.globalScope.findChildren(SymTagEnum.SymTagUDT, null, 0, out symbols);
如果我从C#项目中引用dia2.tlb或dia2.dll,则会得到不同的结果。
如果我引用dia2.tlb,则函数调用成功完成,但是没有返回任何符号。如果我也将SymTagEnum.SymTagPublicSymbol
传递给findChildren
,也是如此。
如果我引用dia2.dll,则该函数将引发NotImplementedException
。在这种情况下,将SymTagPublicSymbol
传递到findChildren
会返回符号。
有人遇到过这个吗?我认为引用.dll是正确的,但是我不知道为什么会抛出NotImplementedException
。
我使用VS命令提示符中的命令创建了dia2.tlb
和dia2.dll
:
cd C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional
midl /I "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\DIA SDK\idl";"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\DIA SDK\include" dia2.idl /tlb dia2.tlb
tlbimp dia2.tlb
非常感谢。