Partager via


IDiaSession::findLinesByLinenum

Détermine les numéros de ligne du compiland à l’intérieur ou à proximité duquel se trouve le numéro de ligne spécifié dans un fichier source.

Syntaxe

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

Paramètres

compiland

[Entrée] Objet IDiaSymbol représentant la compiland dans lequel sont recherchés les numéros de ligne. Ce paramètre ne peut pas être NULL.

file

[Entrée] Objet IDiaSourceFile représentant le fichier source dans lequel la recherche est effectuée. Ce paramètre ne peut pas être NULL.

linenum

[Entrée] Numéro de ligne de base unique.

Notes

Il n’est pas possible d’utiliser zéro pour spécifier toutes les lignes (employez la méthode IDiaSession::findLines pour rechercher toutes les lignes).

column

[Entrée] Numéro de colonne. Utilisez zéro pour spécifier toutes les colonnes. Une colonne correspond à un décalage d’octets dans une ligne.

ppResult

[Sortie] Retourne un objet IDiaEnumLineNumbers contenant la liste des numéros de ligne récupérés.

Valeur renvoyée

En cas de réussite, retourne S_OK , sinon, retourne un code d'erreur.

Exemple

L’exemple suivant montre comment ouvrir un fichier source, énumérer les compilands fournis par ce fichier et localiser les numéros de ligne dans le fichier source où commence chaque 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);
                    }
                }
            }
        }
    }
}

Voir aussi