共用方式為


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);
                     }
                }
            }
        }
    }
}

請參閱

參考

IDiaEnumLineNumbers

IDiaSession

IDiaSession::findLinesByAddr

IDiaSourceFile

IDiaSymbol