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 开始的行号。
注意
不能使用零指定所有行(使用 IDiaSession::findLines 方法查找所有行)。
column
[in] 指定列号。 使用零指定所有列。 一列是偏移到一行的一个字节。
ppResult
[out] 返回一个 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);
}
}
}
}
}
}