Listing 9: The GenerateAppError() overridden method.

HRESULT CUltraMaxService::GenerateAppError(IWriteStream *pStream, HRESULT hr)
{
    if ( !pStream ) return E_INVALIDARG;
    // Format error message
    if ( hr == E_FAIL )
    {
        hr = SoapFault(SOAP_E_SERVER, m_ErrorDesc, -1);
        ::SysFreeString(m_ErrorDesc);
        m_ErrorDesc = NULL;
    }
    else
    {
        LPWSTR pwszMessage = NULL;
        DWORD dwLen = ::FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER|
              FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, 0, pwszMessage, 0, NULL);
        if ( !dwLen ) pwszMessage = L"Application Error";
        hr = SoapFault(SOAP_E_SERVER, pwszMessage, dwLen ? dwLen : -1);
        if ( dwLen ) ::LocalFree(pwszMessage);
    }
    return hr;
}