我正在尝试使用 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
改为抛出 a。在这种情况下,传递SymTagPublicSymbol
给findChildren
确实会返回符号。
有没有人遇到过这个?我认为引用 .dll 是正确的,但我不知道为什么会被NotImplementedException
抛出。
IDL/DLL
我在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
非常感谢。