アドレスでシンボルを列挙したかったのですが、呼び出すとIDiaEnumSymbolsByAddr::Nextがクラッシュするようです。
ドキュメントには、それについて余分なことは何も書かれていません。再現する最小限のコード:
int main()
{
IDiaDataSource *ds;
IDiaSession *session;
IDiaEnumSymbolsByAddr *symbolEnum;
IDiaSymbol *symbol;
HRESULT hr;
ULONG fetched;
CoInitialize(NULL);
hr = makeDiaDataSource(&ds);
assert(SUCCEEDED(hr));
hr = ds->loadDataForExe(L"readpdb.exe", NULL, NULL);
assert(SUCCEEDED(hr));
hr = ds->openSession(&session);
assert(SUCCEEDED(hr));
hr = session->getSymbolsByAddr(&symbolEnum);
assert(SUCCEEDED(hr));
hr = symbolEnum->Next(1, &symbol, &fetched); // crash at this line.
assert(SUCCEEDED(hr));
printf("All is OK.\n");
return 0;
}
これは DIA SDK のバグですか? それとも、このようにインターフェースを使用することは想定されていませんか?