IDiaSession::findLinesByLinenum
소스 파일의 지정된 줄 번호가 내부 또는 가까이에 있는 컴파일 대상의 줄 번호를 결정합니다.
구문
HRESULT findLinesByLinenum (
IDiaSymbol* compiland,
IDiaSourceFile* file,
DWORD linenum,
DWORD column,
IDiaEnumLineNumbers** ppResult
);
매개 변수
compiland
[in] 줄 번호를 검색할 컴파일 대상을 나타내는 IDiaSymbol 개체. 이 매개 변수는 을(를) 사용할 NULL
수 없습니다.
file
[in] 검색할 소스 파일을 나타내는 IDiaSourceFile 개체. 이 매개 변수는 을(를) 사용할 NULL
수 없습니다.
linenum
[in] 1부터 줄 번호를 지정합니다.
참고 항목
모든 줄을 지정하기 위해 0을 사용할 수는 없습니다. 모든 줄을 찾으려면 IDiaSession::findLines 메서드를 사용합니다.
column
[in] 열 번호를 지정합니다. 모든 열을 지정하려면 0을 사용합니다. 열은 선으로의 바이트 오프셋입니다.
ppResult
[out] 검색된 줄 번호의 목록을 포함하는 IDiaEnumLineNumbers 개체를 반환합니다.
Return Value
성공하면 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);
}
}
}
}
}
}