IDiaEnumSymbolsByAddr2
Énumère par adresse les différents symboles contenus dans la source de données.
Syntax
IDiaEnumSymbolsByAddr2 : IDiaEnumSymbolsByAdd
Méthodes dans l'ordre Vtable
Le tableau suivant présente les méthodes de IDiaEnumSymbolsByAddr2
.
Méthode | Description |
---|---|
IDiaEnumSymbolsByAddr2::symbolByAddrEx |
Positionne l’énumérateur en effectuant une recherche par section et décalage. |
IDiaEnumSymbolsByAddr2::symbolByRVAEx |
Positionne l’énumérateur en effectuant une recherche par adresse virtuelle relative (RVA). |
IDiaEnumSymbolsByAddr2::symbolByVAEx |
Positionne l’énumérateur en effectuant une recherche par adresse virtuelle. |
IDiaEnumSymbolsByAddr2::NextEx |
Récupère les symboles suivants dans l’ordre par adresse. Met à jour la position de l’énumérateur par nombre d’éléments récupérés. |
IDiaEnumSymbolsByAddr2::PrevEx |
Récupère les symboles précédents dans l’ordre par adresse. Met à jour la position de l’énumérateur par nombre d’éléments récupérés. |
Notes
Cette interface fournit des symboles regroupés par adresse. Pour utiliser des symboles regroupés par type, par exemple SymTagUDT
(type défini par l’utilisateur) ou SymTagBaseClass
, utilisez l’interface IDiaEnumSymbols
.
Remarques pour les appelants
Obtenez cette interface en appelant la IDiaSession::getSymbolsByAddr
méthode, puis en appelant IUnknown::QueryInterface
avec le riid
paramètre défini sur IID_IDiaEnumSymbolsByAddr2
.
Exemple
Cette fonction affiche le nom et l’adresse de tous les symboles classés par adresse virtuelle relative.
void ShowSymbolsByAddress(IDiaSession *pSession)
{
CComPtr<IDiaEnumSymbolsByAddr> pEnumByAddr;
if ( FAILED( psession->getSymbolsByAddr( &pEnumByAddr ) ) )
{
Fatal( "getSymbolsByAddr" );
}
CComPtr<IDiaEnumSymbolsByAddr2> pEnumByAddr2;
if ( FAILED( pEnumByAddr->QueryInterface( IID_IDiaEnumSymbolsByAddr2, &pEnumByAddr2 ) ) )
{
Fatal( "getSymbolsByAddr" );
}
CComPtr<IDiaSymbol> pSym;
if ( FAILED( pEnumByAddr2->symbolByAddrEx( FALSE, 1, 0, &pSym ) ) )
{
Fatal( "symbolByAddr" );
}
DWORD rvaLast = 0;
if ( pSym->get_relativeVirtualAddress( &rvaLast ) == S_OK )
{
pSym = 0;
if ( FAILED( pEnumByAddr2->symbolByRVAEx( FALSE, rvaLast, &pSym ) ) )
{
Fatal( "symbolByAddr" );
}
printf( "Symbols in order\n" );
do
{
CDiaBSTR name;
if ( pSym->get_name( &name ) != S_OK )
{
printf( "\t0x%08X (%ws) <no name>\n", rvaLast );
}
else
{
printf( "\t0x%08X %ws\n", rvaLast, name );
}
pSym = 0;
celt = 0;
if ( FAILED( hr = pEnumByAddr2->NextEx( FALSE, 1, &pSym, &celt ) ) )
{
break;
}
} while ( celt == 1 );
}
}
Configuration requise
En-tête : Dia2.h
Bibliothèque : diaguids.lib
DLL : msdia140.dll