IDiaSession::findLinesByLinenum
Определяет номера строк компилятора, которые указанный номер строки в исходном файле находится в пределах или рядом.
Синтаксис
HRESULT findLinesByLinenum (
IDiaSymbol* compiland,
IDiaSourceFile* file,
DWORD linenum,
DWORD column,
IDiaEnumLineNumbers** ppResult
);
Параметры
compiland
[in] Объект IDiaSymbol , представляющий компилятор, в котором выполняется поиск номеров строк. Этот параметр не может быть NULL
.
file
[in] Объект IDiaSourceFile , представляющий исходный файл для поиска. Этот параметр не может быть NULL
.
linenum
[in] Задает одноуровневый номер строки.
Примечание.
Не удается указать все строки (используйте метод IDiaSession::findLines для поиска всех строк).
column
[in] Указывает номер столбца. Используйте ноль, чтобы указать все столбцы. Столбец — это смещение байтов в строку.
ppResult
[out] Возвращает objta IDiaEnumLineNumbers , содержащий список полученных номеров строк.
Возвращаемое значение
В случае успешного выполнения возвращается S_OK
; в противном случае возвращается код ошибки.
Пример
В следующем примере показано, как открыть исходный файл, перечислить компиляторы, внесенные этим файлом, и найти номера строк в исходном файле, где запускается каждый компилятор.
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);
}
}
}
}
}
}