Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uzyskuje dostęp do informacji opisujących proces mapowania z bloku bajtów tekstu obrazu na numer wiersza pliku źródłowego.
Składnia
IDiaLineNumber : IUnknown
Metody w tabeli Vtable Order
W poniższej tabeli przedstawiono metody .IDiaLineNumber
| Metoda | opis |
|---|---|
| IDiaLineNumber::get_compiland | Pobiera odwołanie do symbolu compiland, który przyczynił się do bajtów tekstu obrazu. |
| IDiaLineNumber::get_sourceFile | Pobiera odwołanie do obiektu pliku źródłowego. |
| IDiaLineNumber::get_lineNumber | Pobiera numer wiersza w pliku źródłowym. |
| IDiaLineNumber::get_lineNumberEnd | Pobiera jednokierunkowy numer wiersza źródłowego, w którym kończy się instrukcja lub wyrażenie. |
| IDiaLineNumber::get_columnNumber | Pobiera numer kolumny, w której rozpoczyna się wyrażenie lub instrukcja. |
| IDiaLineNumber::get_columnNumberEnd | Pobiera numer kolumny, w której kończy się wyrażenie lub instrukcja. |
| IDiaLineNumber::get_addressSection | Pobiera część sekcji adresu pamięci, w której rozpoczyna się blok. |
| IDiaLineNumber::get_addressOffset | Pobiera część przesunięcia adresu pamięci, w której rozpoczyna się blok. |
| IDiaLineNumber::get_relativeVirtualAddress | Pobiera względny adres wirtualny obrazu (RVA) bloku. |
| IDiaLineNumber::get_virtualAddress | Pobiera adres wirtualny (VA) bloku. |
| IDiaLineNumber::get_length | Pobiera liczbę bajtów w bloku. |
| IDiaLineNumber::get_sourceFileId | Pobiera unikatowy identyfikator pliku źródłowego dla pliku źródłowego, który przyczynił się do tego wiersza. |
| IDiaLineNumber::get_statement | Pobiera flagę wskazującą, że informacje w tym wierszu opisują początek instrukcji w źródle programu. |
| IDiaLineNumber::get_compilandId | Pobiera unikatowy identyfikator pliku compiland, który przyczynił się do tego wiersza. |
Uwagi
Uwagi dotyczące wywoływania
Uzyskaj ten interfejs, wywołując metody IDiaEnumLineNumbers::Item lub IDiaEnumLineNumbers::Next .
Przykład
Poniższa funkcja wyświetla numery wierszy używane w funkcji (reprezentowane przez pSymbolfunkcję ).
void dumpFunctionLines( IDiaSymbol* pSymbol, IDiaSession* pSession )
{
ULONGLONG length = 0;
DWORD isect = 0;
DWORD offset = 0;
pSymbol->get_addressSection( &isect );
pSymbol->get_addressOffset( &offset );
pSymbol->get_length( &length );
if ( isect != 0 && length > 0 )
{
CComPtr< IDiaEnumLineNumbers > pLines;
if ( SUCCEEDED( pSession->findLinesByAddr(
isect,
offset,
static_cast<DWORD>( length ),
&pLines)
)
)
{
CComPtr< IDiaLineNumber > pLine;
DWORD celt = 0;
bool firstLine = true;
while ( SUCCEEDED( pLines->Next( 1, &pLine, &celt ) ) &&
celt == 1 )
{
DWORD offset;
DWORD seg;
DWORD linenum;
CComPtr< IDiaSymbol > pComp;
CComPtr< IDiaSourceFile > pSrc;
pLine->get_compiland( &pComp );
pLine->get_sourceFile( &pSrc );
pLine->get_addressSection( &seg );
pLine->get_addressOffset( &offset );
pLine->get_lineNumber( &linenum );
printf( "\tline %d at 0x%x:0x%x\n", linenum, seg, offset );
pLine = NULL;
if ( firstLine )
{
// sanity check
CComPtr< IDiaEnumLineNumbers > pLinesByLineNum;
if ( SUCCEEDED( pSession->findLinesByLinenum(
pComp,
pSrc,
linenum,
0,
&pLinesByLineNum)
)
)
{
CComPtr< IDiaLineNumber > pLine;
DWORD celt;
while ( SUCCEEDED( pLinesByLineNum->Next( 1, &pLine, &celt ) ) &&
celt == 1 )
{
DWORD offset;
DWORD seg;
DWORD linenum;
pLine->get_addressSection( &seg );
pLine->get_addressOffset( &offset );
pLine->get_lineNumber( &linenum );
printf( "\t\tfound line %d at 0x%x:0x%x\n", linenum, seg, offset );
pLine = NULL;
}
}
firstLine = false;
}
}
}
}
}
Wymagania
Nagłówek: Dia2.h
Biblioteka: diaguids.lib
BIBLIOTEKA DLL: msdia80.dll