IDiaSession::findLinesByLinenum
ソース ファイル内の指定された行番号が内部にあるするかまたは異なるコンパイル単位の行番号を示します。
HRESULT findLinesByLinenum (
IDiaSymbol* compiland,
IDiaSourceFile* file,
DWORD linenum,
DWORD column,
IDiaEnumLineNumbers** ppResult
);
パラメーター
compiland
[出力] 行番号を検索するコンパイル単位を表す IDiaSymbol のオブジェクト。 このパラメーターには、NULL は指定できません。file
[入力] 検索するソース ファイルを表す IDiaSourceFile のオブジェクト。 このパラメーターには、NULL は指定できません。linenum
[入力] 1 から始まる行番号が示されます。注意
すべての行を指定するにはを使用できません。すべての行を検索するに IDiaSession::findLines のメソッドを使用します。
column
[出力] 行数を指定します。 すべての列を指定するにはを使用します。 列は行へのオフセットです。ppResult
[出力] 取得された行番号の一覧を含む IDiaEnumLineNumbers の objta を返します。
戻り値
正常に終了した場合戻り 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);
}
}
}
}
}
}