Compartir a través de


IDiaSession::findLinesByLinenum

Determina los números de línea del compilado en el cual el número de línea especificado en un archivo de origen se encuentra dentro o cerca.

Sintaxis

HRESULT findLinesByLinenum ( 
    IDiaSymbol*           compiland,
    IDiaSourceFile*       file,
    DWORD                 linenum,
    DWORD                 column,
    IDiaEnumLineNumbers** ppResult
);

Parámetros

compiland

[in] Objeto IDiaSymbol que representa el compilando en el que buscar los números de línea. Este parámetro no puede ser NULL.

file

[in] Objeto IDiaSourceFile que representa el archivo de origen en el que se va a buscar. Este parámetro no puede ser NULL.

linenum

[in] Especifica un número de línea basado en uno.

Nota

No puede usar cero para especificar todas las líneas (use el método IDiaSession::findLines para buscar todas las líneas).

column

[in] Especifica el número de columna. Use cero para especificar todas las columnas. Una columna es un desplazamiento de bytes en una línea.

ppResult

[out] Devuelve un objeto IDiaEnumLineNumbers que contiene una lista de los números de línea recuperados.

Valor devuelto

Si la operación se realiza correctamente, devuelve S_OK; de lo contrario, devuelve un código de error.

Ejemplo

En el ejemplo siguiente se muestra cómo abrir un archivo de código fuente, enumerar los compilandos aportados por este archivo y buscar los números de línea en el archivo de origen donde se inicia cada compilando.

void ShowLinesInCompilands(IDiaSession *pSession, LPCOLESTR filename)
{
    IDiaEnumSourceFiles* pEnum;
    IDiaSourceFile*      pFile;
    DWORD                celt;

    pSession->findFile ( NULL, filename, nsFNameExt, &pEnum );
    while ( pEnum->Next ( 1, &pFile, &celt ) == S_OK ) // for each file
    {
        IDiaEnumSymbols* pEnumCompilands;
        IDiaSymbol* pCompiland;

        pFile->get_compilands ( &pEnumCompilands );
        // for each compiland
        while ( pEnumCompilands->Next ( 1, &pCompiland, &celt ) == S_OK )
        {
            IDiaEnumLineNumbers* pEnum;
            // Find first compiland closest to line 1 of the file.
            if (pSession->findLinesByLinenum( pCompiland, pFile, 1, 0, &pEnum ) == S_OK)
            {
                IDiaLineNumber *pLineNumber;
                DWORD lineCount;
                while ( pEnum->Next(1,&pLineNumber,&lineCount) == S_OK)
                {
                    DWORD lineNum;
                    if (pLineNumber->get_line(&lineNum) == S_OK)
                    {
                        printf("compiland starts in source at line number = %lu\n",lineNum);
                    }
                }
            }
        }
    }
}

Consulte también