Freigeben über


IDiaSession::findLinesByLinenum

Bestimmt die Zeilennummern der Kompiliereinheit, in der oder in deren Nähe sich die angegebene Zeilennummer in einer Quelldatei befindet.

Syntax

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

Parameter

compiland

[in] Ein IDiaSymbol-Objekt, das die Kompiliereinheit darstellt, in der nach den Zeilennummern gesucht werden soll. Dieser Parameter darf nicht NULL sein.

file

[in] Ein IDiaSourceFile-Objekt, das die Quelldatei darstellt, in der gesucht werden soll. Dieser Parameter darf nicht NULL sein.

linenum

[in] Gibt eine Eins-basierte Zeilennummer an.

Hinweis

Sie können nicht null verwenden, um alle Zeilen anzugeben (verwenden Sie die IDiaSession::findLines-Methode, um alle Zeilen zu finden).

column

[in] Gibt die Spaltennummer an. Verwenden Sie null, um alle Spalten anzugeben. Eine Spalte ist ein Byteoffset in einer Zeile.

ppResult

[out] Gibt ein IDiaEnumLineNumbers-Objekt zurück, das eine Liste der abgerufenen Zeilennummern enthält.

Rückgabewert

Wenn die Ausführung erfolgreich ist, wird S_OK, andernfalls ein Fehlercode zurückgegeben.

Beispiel

Im folgenden Beispiel wird gezeigt, wie Sie eine Quelldatei öffnen, die von dieser Datei bereitgestellten Kompiliereinheiten auflisten und die Zeilennummern in der Quelldatei suchen, in der jede Kompiliereinheit beginnt.

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

Weitere Informationen