Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Ruft die Adresse in einer Funktion ab, die den angegebenen Zeilenoffset darstellt.
Syntax
int GetFunctionLineOffset(
IDebugAddress pAddress,
uint dwLine,
out IDebugAddress ppNewAddress
);
Parameter
pAddress
[in] Adresse, die Funktion darstellt.
dwLine
[in] Zeilenoffset vom Anfang der Funktion.
ppNewAddress
[out] Neue Adresse, die den Zeilenabstand vom Anfang der Funktion darstellt.
Rückgabewert
Wenn die Ausführung erfolgreich ist, wird S_OK, andernfalls ein Fehlercode zurückgegeben.
Beispiel
Das folgende Beispiel zeigt, wie Sie diese Methode für ein CDebugSymbolProvider -Objekt implementieren, das die IDebugComPlusSymbolProvider-Schnittstelle verfügbar macht.
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;
}