Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Retrieves the address within a function that represents the given line offset.
HRESULT GetFunctionLineOffset(
   IDebugAddress*  pAddress, 
   DWORD           dwLine, 
   IDebugAddress** ppNewAddress 
);
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;
}