IDiaEnumSymbolsByAddr

由多个符号在数据源中包含的地址枚举。

IDiaEnumSymbolsByAddr : IUnknown

方法按 Vtable 顺序

下表显示 IDiaEnumSymbolsByAddr方法。

方法

说明

IDiaEnumSymbolsByAddr::symbolByAddr

通过执行查找确定枚举数由部分和扭曲。

IDiaEnumSymbolsByAddr::symbolByRVA

通过执行查找确定枚举数由相对虚拟地址 (RVA)。

IDiaEnumSymbolsByAddr::symbolByVA

通过执行查找确定枚举数由虚拟地址 (VA)。

IDiaEnumSymbolsByAddr::Next

由地址检索下符号按顺序。所获取的元素数更新枚举数位置。

IDiaEnumSymbolsByAddr::Prev

由地址检索以前的符号按顺序。所获取的元素数更新枚举数位置。

IDiaEnumSymbolsByAddr::Clone

复制该对象。

备注

此接口提供地址分组的符号。例如若要使用类型分组符号时, SymTagUDT (用户定义的类型) 或 SymTagBaseClass,请使用 IDiaEnumSymbols 接口。

调用方的说明

通过调用 IDiaSession::getSymbolsByAddr 方法获取此接口。

示例

此功能公开相对虚拟地址 (rva) 排序的所有符号名称和地址。

void ShowSymbolsByAddress(IDiaSession *pSession)
{
    CComPtr<IDiaEnumSymbolsByAddr> pEnumByAddr;
    if ( FAILED( psession->getSymbolsByAddr( &pEnumByAddr ) ) )
    {
        Fatal( "getSymbolsByAddr" );
    }
    CComPtr<IDiaSymbol> pSym;
    if ( FAILED( pEnumByAddr->symbolByAddr( 1, 0, &pSym ) ) )
    {
        Fatal( "symbolByAddr" );
    }
    DWORD rvaLast = 0;
    if ( pSym->get_relativeVirtualAddress( &rvaLast ) == S_OK )
    {
        pSym = 0;
        if ( FAILED( pEnumByAddr->symbolByRVA( 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 = pEnumByAddr->Next( 1, &pSym, &celt ) ) )
            {
                break;
            }
        } while ( celt == 1 );
    }
}

要求

标题:Dia2.h

库:diaguids.lib

DLL:msdia80.dll

请参见

参考

IDiaSession::getSymbolsByAddr

IDiaEnumSymbols

其他资源

接口(调试接口访问 SDK)