IDiaSession::findLinesByLinenum
Détermine les numéros de ligne du module (compiland) que le numéro de ligne spécifié dans un fichier source se trouve dans ou approche.
HRESULT findLinesByLinenum (
IDiaSymbol* compiland,
IDiaSourceFile* file,
DWORD linenum,
DWORD column,
IDiaEnumLineNumbers** ppResult
);
Paramètres
compiland
[in] Un objet d' IDiaSymbol qui représente le module dans lequel vous pouvez rechercher les numéros de ligne. Ce paramètre ne peut pas être NULL.file
[in] Un objet d' IDiaSourceFile qui représente le fichier source pour le rechercher dans. Ce paramètre ne peut pas être NULL.linenum
[in] spécifie un numéro de ligne de base 1.Notes
Vous ne pouvez pas utiliser zéro pour spécifier toutes les lignes (utilisez la méthode d' IDiaSession::findLines pour rechercher toutes les lignes).
column
[in] spécifie le numéro de colonne. utilisation zéro de spécifier toutes les colonnes. Une colonne est un offset d'octets en une ligne.ppResult
[out] Retourne un objta d' IDiaEnumLineNumbers qui contient une liste des numéros de ligne récupérés.
Valeur de retour
En cas de réussite, retourne S_OK; sinon, retourne un code d'erreur.
Exemple
L'exemple suivant montre comment ouvrir un fichier source, énumérer les paramètres fournis par ce fichier, et rechercher les numéros de ligne dans le fichier source où commence de chaque module (compiland).
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);
}
}
}
}
}
}