Aracılığıyla paylaş


IDiaSession::findLinesByLinenum

Kaynak dosyada belirtilen satır numarasının içinde veya yakınında yer alan compiland satır numaralarını belirler.

Sözdizimi

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

Parametreler

compiland

[in] Satır numaralarının arandığı compiland'ı temsil eden bir IDiaSymbol nesnesi. Bu parametre olamaz NULL.

file

[in] Aranacak kaynak dosyayı temsil eden bir IDiaSourceFile nesnesi. Bu parametre olamaz NULL.

linenum

[in] Tek tabanlı bir satır numarası belirtir.

Dekont

Tüm satırları belirtmek için sıfır kullanamazsınız (tüm satırları bulmak için IDiaSession::findLines yöntemini kullanın).

column

[in] Sütun numarasını belirtir. Tüm sütunları belirtmek için sıfır kullanın. Sütun, bir satıra bayt uzaklığıdır.

ppResult

[out] Alınan satır numaralarının listesini içeren bir IDiaEnumLineNumbers objta döndürür.

İade Değeri

Başarılı olursa döndürür S_OK; aksi takdirde bir hata kodu döndürür.

Örnek

Aşağıdaki örnekte bir kaynak dosyanın nasıl açıldığı, bu dosyanın katkıda bulunduğu compiland'ların nasıl numaralandırıldığı ve her bir compiland'ın başladığı kaynak dosyada satır numaralarının nasıl bulunacağı gösterilmektedir.

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

Ayrıca bkz.