IDiaSession::findLinesByLinenum
決定在來源檔案中指定行號所在或附近的編譯模組行號。
語法
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
;否則,會傳回錯誤碼。
範例
下列範例示範如何開啟來源檔案、列舉此檔案所參與的編譯模組,並在每個編譯模組開始的來源檔案中找出行號。
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);
}
}
}
}
}
}