Condividi tramite


IDiaSession::findLinesByLinenum

Note

This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here

Determines the line numbers of the compiland that the specified line number in a source file lies within or near.

Syntax

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

Parameters

compiland
[in] An IDiaSymbol object that represents the compiland in which to search for the line numbers. This parameter cannot be NULL.

file
[in] An IDiaSourceFile object that represents the source file to search in. This parameter cannot be NULL.

linenum
[in] Specifies a one-based line number.

Note

You cannot use zero to specify all lines (use the IDiaSession::findLines method to find all lines).

column
[in] Specifies the column number. Use zero to specify all columns. A column is a byte offset into a line.

ppResult
[out] Returns an IDiaEnumLineNumbers objta that contains a list of the line numbers retrieved.

Return Value

If successful, returns S_OK; otherwise, returns an error code.

Example

The following example shows how to open a source file, enumerate the compilands contributed by this file, and locate the line numbers in the source file where each compiland starts.

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

See Also

IDiaEnumLineNumbers
IDiaSession
IDiaSession::findLinesByAddr
IDiaSourceFile
IDiaSymbol