1

我正在尝试使用 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。在这种情况下,传递SymTagPublicSymbolfindChildren确实会返回符号。

有没有人遇到过这个?我认为引用 .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

非常感谢。

4

0 回答 0