Udostępnij za pośrednictwem


IDiaSession::findLinesByLinenum

Określa numery wierszy compiland, w których znajduje się określony numer wiersza w pliku źródłowym lub w pobliżu.

Składnia

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

Parametry

compiland

[in] Obiekt IDiaSymbol reprezentujący compiland, w którym należy wyszukać numery wierszy. Ten parametr nie może mieć wartości NULL.

file

[in] Obiekt IDiaSourceFile reprezentujący plik źródłowy do wyszukania. Ten parametr nie może mieć wartości NULL.

linenum

[in] Określa jednokierunkowy numer wiersza.

Uwaga

Nie można użyć zera do określenia wszystkich wierszy (użyj metody IDiaSession::findLines , aby znaleźć wszystkie wiersze).

column

[in] Określa numer kolumny. Użyj zera, aby określić wszystkie kolumny. Kolumna jest przesunięciem bajtu na linię.

ppResult

[out] Zwraca obiekt IDiaEnumLineNumbers objta zawierający listę pobranych numerów wierszy.

Wartość zwracana

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

Przykład

W poniższym przykładzie pokazano, jak otworzyć plik źródłowy, wyliczyć wiersze współużytkowane przez ten plik i zlokalizować numery wierszy w pliku źródłowym, w którym uruchamia się każdy 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ż