Freigeben über


IDiaSession::findLinesByLinenum

Bestimmt die Zeilennummern der Kompiliereinheit sicher, dass die angegebene Zeilennummer in einer Quelldatei Elemente befindet oder nähert.

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

Parameter

  • compiland
    [in] Ein IDiaSymbol-Objekt, das die Kompiliereinheit darstellt, in der für die Zeilennummern suchen.Dieser Parameter darf nicht NULL sein.

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

  • linenum
    [in] Gibt eine 1-basierte Zeilennummer an.

    HinweisHinweis

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

  • column
    [in] Gibt die Nummer der Spalte an.Verwendung von Nullen, alle Spalten anzugeben.Eine Spalte ist ein Byteoffset in eine Zeile.

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

Rückgabewert

Bei Erfolg gibt S_OKzurück. andernfalls gibt einen Fehlercode zurück.

Beispiel

Im folgenden Beispiel wird gezeigt, wie eine Quelldatei öffnet, die Kompiliereinheiten auflistet, die durch diese Datei bereitgestellt werden und die Zeilennummern in der Quelldatei in der jeder 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);
                     }
                }
            }
        }
    }
}

Siehe auch

Referenz

IDiaEnumLineNumbers

IDiaSession

IDiaSession::findLinesByAddr

IDiaSourceFile

IDiaSymbol