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);
}
}
}
}
}
}