确定编译的行号在源文件中指定的行号位于内或即将。
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] 返回包含检索的行编号列出的 IDiaEnumLineNumbers objta。
返回值
如果成功,则返回; S_OK否则,返回错误代码。
示例
下面的示例演示如何打开源文件,此枚举文件提供的 compiland 中定位和行号每次编译启动的源文件。
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);
}
}
}
}
}
}