IDiaSession::findLinesByLinenum

Tentukan nomor baris kompilasi yang mana nomor barisnya yang ditentukan dalam file sumber berada di dalam atau di dekatnya.

Sintaks

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

Parameter

compiland

[in] Objek IDiaSymbol yang mewakili kompilasi untuk mencari nomor baris. Parameter ini tidak boleh NULL.

file

[in] Objek IDiaSourceFile yang mewakili file sumber yang dicari. Parameter ini tidak boleh NULL.

linenum

[in] Tentukan nomor baris berbasis satu.

Catatan

Anda tidak boleh menggunakan nol untuk menentukan semua baris (gunakan metode IDiaSession::findLines untuk mencari semua baris).

column

[in] Tentukan nomor kolom. Gunakan nol untuk menentukan semua kolom. Kolom adalah offset byte ke dalam baris.

ppResult

[out] Mengembalikan objta IDiaEnumLineNumbers yang berisi daftar nomor baris yang diambil.

Tampilkan Nilai

Jika berhasil, mengembalikan S_OK; jika tidak, mengembalikan kode galat.

Contoh

Contoh berikut menampilkan cara membuka file sumber, mencacah kompilasi yang dikontribusikan oleh file ini, dan menemukan nomor baris dalam file sumber tempat setiap kompilasi dimulai.

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

Baca juga