Udostępnij za pośrednictwem


IDiaSession::findLinesByLinenum

Określa numery linii compiland, że określony numer wiersza w pliku źródłowym leży w obrębie lub w jego pobliżu.

HRESULT findLinesByLinenum ( 
   IDiaSymbol*           compiland,
   IDiaSourceFile*       file,
   DWORD                 linenum,
   DWORD                 column,
   IDiaEnumLineNumbers** ppResult
);

Parametry

  • compiland
    [w] IDiaSymbol Obiekt, który reprezentuje compiland, w którym do wyszukiwania numery linii.Ten parametr nie może być NULL.

  • file
    [w] IDiaSourceFile Obiekt, który reprezentuje plik źródłowy do wyszukiwania.Ten parametr nie może być NULL.

  • linenum
    [w] Określa liczbę linii opartych na jeden.

    [!UWAGA]

    Zero nie można użyć, aby określić wszystkie wiersze (Użyj IDiaSession::findLines metodę, aby znaleźć wszystkie wiersze).

  • column
    [w] Określa numer kolumny.Użyj zero, aby określić wszystkie kolumny.Kolumna jest przesunięcie bajtu do wiersza.

  • ppResult
    [out] Zwraca IDiaEnumLineNumbers objta, który zawiera listę numerów wierszy pobierane.

Wartość zwracana

Jeśli się powiedzie, zwraca S_OK; w przeciwnym razie zwraca kod błędu.

Przykład

Poniższy przykład pokazuje, jak otworzyć plik źródłowy, wyliczenia compilands, wniesionych przez ten plik i zlokalizuj numerów wierszy w pliku źródłowym, gdzie rozpoczyna się każdego 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);
                     }
                }
            }
        }
    }
}

Zobacz też

Informacje

IDiaEnumLineNumbers

IDiaSession

IDiaSession::findLinesByAddr

IDiaSourceFile

IDiaSymbol