IDiaSession::findLinesByLinenum
ソース ファイル内の指定された行番号が内部または近くにあるコンパイル単位の行番号を特定します。
構文
HRESULT findLinesByLinenum (
IDiaSymbol* compiland,
IDiaSourceFile* file,
DWORD linenum,
DWORD column,
IDiaEnumLineNumbers** ppResult
);
パラメーター
compiland
[入力] 行番号を検索するコンパイル単位を表す IDiaSymbol オブジェクト。 このパラメーターを NULL
とすることはできません。
file
[入力] 検索対象のソース ファイルを表す IDiaSourceFile オブジェクト。 このパラメーターを NULL
とすることはできません。
linenum
[入力] 1 から始まる行番号を指定します。
Note
0 を使用してすべての行を指定することはできません (すべての行を検索するには、IDiaSession::findLines メソッドを使用します)。
column
[入力] 列番号を指定します。 すべての列を指定するには 0 を使用します。 列は、1 行内のバイト オフセットです。
ppResult
[出力] 取得した行番号のリストを含む 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);
}
}
}
}
}
}