Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Récupère l’adresse dans une fonction qui représente le décalage de ligne donné.
Syntaxe
int GetFunctionLineOffset(
IDebugAddress pAddress,
uint dwLine,
out IDebugAddress ppNewAddress
);
Paramètres
pAddress
[in] Adresse qui représente la fonction.
dwLine
[in] Décalage de ligne à partir du début de la fonction.
ppNewAddress
[out] Nouvelle adresse qui représente le décalage de ligne à partir du début de la fonction.
Valeur de retour
En cas de réussite, retourne S_OK , sinon, retourne un code d'erreur.
Exemple
L’exemple suivant montre comment implémenter cette méthode pour un objet CDebugSymbolProvider qui expose l’interface IDebugComPlusSymbolProvider .
HRESULT CDebugSymbolProvider::GetFunctionLineOffset(
IDebugAddress *pAddress,
DWORD dwLine,
IDebugAddress **ppNewAddress
)
{
HRESULT hr = S_OK;
CDEBUG_ADDRESS address;
CComPtr<CModule> pModule;
DWORD dwOffset;
CDebugAddress* paddr = NULL;
METHOD_ENTRY(CDebugSymbolProvider::GetFunctionLineOffset);
IfFalseGo( pAddress, S_FALSE );
IfFailGo( pAddress->GetAddress( &address ) );
ASSERT(address.addr.dwKind == ADDRESS_KIND_METADATA_METHOD);
IfFalseGo( address.addr.dwKind == ADDRESS_KIND_METADATA_METHOD, S_FALSE );
IfFailGo( GetModule( address.GetModule(), &pModule) );
// Find the first offset for dwLine in the function
IfFailGo( pModule->GetFunctionLineOffset( address.addr.addr.addrMethod.tokMethod,
address.addr.addr.addrMethod.dwVersion,
dwLine,
&dwOffset ) );
// Create the new Address
address.addr.addr.addrMethod.dwOffset = dwOffset;
IfNullGo( paddr = new CDebugAddress(address), E_OUTOFMEMORY );
IfFailGo( paddr->QueryInterface( __uuidof(IDebugAddress),
(void**) ppNewAddress ) );
Error:
METHOD_EXIT(CDebugSymbolProvider::GetFunctionLineOffset, hr);
RELEASE( paddr );
return hr;
}