Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Retrieves the address within a function that represents the given line offset.
Syntax
int GetFunctionLineOffset(
IDebugAddress pAddress,
uint dwLine,
out IDebugAddress ppNewAddress
);
Parameters
pAddress
[in] Address that represents function.
dwLine
[in] Line offset from beginning of function.
ppNewAddress
[out] New address that represents line offset from beginning of function.
Return Value
If successful, returns S_OK; otherwise, returns an error code.
Example
The following example shows how to implement this method for a CDebugSymbolProvider object that exposes the IDebugComPlusSymbolProvider interface.
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;
}