IDiaSession::findLinesByLinenum
Bestimmt die Zeilennummern der Kompiliereinheit, in der oder in deren Nähe sich die angegebene Zeilennummer in einer Quelldatei befindet.
Syntax
HRESULT findLinesByLinenum (
IDiaSymbol* compiland,
IDiaSourceFile* file,
DWORD linenum,
DWORD column,
IDiaEnumLineNumbers** ppResult
);
Parameter
compiland
[in] Ein IDiaSymbol-Objekt, das die Kompiliereinheit darstellt, in der nach den Zeilennummern gesucht werden soll. Dieser Parameter darf nicht NULL
sein.
file
[in] Ein IDiaSourceFile-Objekt, das die Quelldatei darstellt, in der gesucht werden soll. Dieser Parameter darf nicht NULL
sein.
linenum
[in] Gibt eine Eins-basierte Zeilennummer an.
Hinweis
Sie können nicht null verwenden, um alle Zeilen anzugeben (verwenden Sie die IDiaSession::findLines-Methode, um alle Zeilen zu finden).
column
[in] Gibt die Spaltennummer an. Verwenden Sie null, um alle Spalten anzugeben. Eine Spalte ist ein Byteoffset in einer Zeile.
ppResult
[out] Gibt ein IDiaEnumLineNumbers-Objekt zurück, das eine Liste der abgerufenen Zeilennummern enthält.
Rückgabewert
Wenn die Ausführung erfolgreich ist, wird S_OK
, andernfalls ein Fehlercode zurückgegeben.
Beispiel
Im folgenden Beispiel wird gezeigt, wie Sie eine Quelldatei öffnen, die von dieser Datei bereitgestellten Kompiliereinheiten auflisten und die Zeilennummern in der Quelldatei suchen, in der jede Kompiliereinheit beginnt.
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);
}
}
}
}
}
}