IDiaSession::findLinesByLinenum
Bestimmt die Zeilennummern der Kompiliereinheit sicher, dass die angegebene Zeilennummer in einer Quelldatei Elemente befindet oder nähert.
HRESULT findLinesByLinenum (
IDiaSymbol* compiland,
IDiaSourceFile* file,
DWORD linenum,
DWORD column,
IDiaEnumLineNumbers** ppResult
);
Parameter
compiland
[in] Ein IDiaSymbol-Objekt, das die Kompiliereinheit darstellt, in der für die Zeilennummern suchen.Dieser Parameter darf nicht NULL sein.file
[in] Ein IDiaSourceFile-Objekt, das die Quelldatei darstellt, das gesucht werden soll.Dieser Parameter darf nicht NULL sein.linenum
[in] Gibt eine 1-basierte Zeilennummer an.Hinweis Sie können keine nicht verwenden, um alle Zeilen anzugeben (verwenden Sie die IDiaSession::findLines-Methode, um alle Zeilen zu suchen).
column
[in] Gibt die Nummer der Spalte an.Verwendung von Nullen, alle Spalten anzugeben.Eine Spalte ist ein Byteoffset in eine Zeile.ppResult
[out] Gibt ein IDiaEnumLineNumbers objta zurück, das eine Liste der abgerufenen Zeilennummern enthält.
Rückgabewert
Bei Erfolg gibt S_OKzurück. andernfalls gibt einen Fehlercode zurück.
Beispiel
Im folgenden Beispiel wird gezeigt, wie eine Quelldatei öffnet, die Kompiliereinheiten auflistet, die durch diese Datei bereitgestellt werden und die Zeilennummern in der Quelldatei in der jeder 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);
}
}
}
}
}
}