IDiaSession::findLinesByLinenum
Determina os números de linha do compiland do qual o número de linha especificado em um arquivo de origem está dentro ou próximo.
Sintaxe
HRESULT findLinesByLinenum (
IDiaSymbol* compiland,
IDiaSourceFile* file,
DWORD linenum,
DWORD column,
IDiaEnumLineNumbers** ppResult
);
Parâmetros
compiland
[in] Um objeto IDiaSymbol que representa o compiland no qual pesquisar os números de linha. O parâmetro não pode ser NULL
.
file
[in] Um objeto IDiaSourceFile que representa o arquivo de origem no qual pesquisar. O parâmetro não pode ser NULL
.
linenum
[in] Especifica um número de linha baseado em um.
Observação
Você não pode usar zero para especificar todas as linhas (use o método IDiaSession::findLines para localizar todas as linhas).
column
[in] Especifica o número da coluna. Use zero para especificar todas as colunas. Uma coluna é um deslocamento de bytes em uma linha.
ppResult
[out] Retorna um objeto IDiaEnumLineNumbers que contém uma lista dos números de linha recuperados.
Valor Retornado
Se tiver êxito, retornará S_OK
. Caso contrário, retornará um código de erro.
Exemplo
O exemplo a seguir mostra como abrir um arquivo de origem, enumerar os compilands fornecidos por esse arquivo e localizar os números de linha no arquivo de origem em que cada compiland é iniciado.
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);
}
}
}
}
}
}