hsperror.cpp

来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 195 行

CPP
195
字号
/* * * This software is released under the provisions of the GPL version 2. * see file "COPYING".  If that file is not available, the full statement  * of the license can be found at * * http://www.fsf.org/licensing/licenses/gpl.txt * * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. * Portions (c) Paul Cifarelli 2005 * */#include "hxcomm.h"#include "hxerror.h"#include "hxcore.h"#include "hxbuffer.h"#include "hsperror.h"#include <stdio.h>#include "hxausvc.h"#include "helix-sp.h"#include "utils.h"HSPErrorSink::HSPErrorSink(IUnknown* pUnknown, HelixSimplePlayer *pSplay)     : m_lRefCount(0),      m_pPlayer(NULL),      m_splayer(pSplay){    IHXClientEngine* pEngine = NULL;    pUnknown->QueryInterface(IID_IHXClientEngine, (void**)&pEngine );    if( pEngine )    {        IUnknown* pTmp = NULL;        pEngine->GetPlayer(0, pTmp);        m_pPlayer = (IHXPlayer*)pTmp;    }        HX_RELEASE( pEngine );    HX_ASSERT(m_pPlayer);}HSPErrorSink::~HSPErrorSink(){    HX_RELEASE(m_pPlayer);}// *** IUnknown methods ***///////////////////////////////////////////////////////////////////////////  Method://  IUnknown::QueryInterface//  Purpose://  Implement this to export the interfaces supported by your //  object.//STDMETHODIMP HSPErrorSink::QueryInterface(REFIID riid, void** ppvObj){    if (IsEqualIID(riid, IID_IUnknown))    {        AddRef();        *ppvObj = (IUnknown*)(IHXErrorSink*)this;        return HXR_OK;    }    else if (IsEqualIID(riid, IID_IHXErrorSink))    {        AddRef();        *ppvObj = (IHXErrorSink*) this;        return HXR_OK;    }    *ppvObj = NULL;    return HXR_NOINTERFACE;}///////////////////////////////////////////////////////////////////////////  Method://  IUnknown::AddRef//  Purpose://  Everyone usually implements this the same... feel free to use//  this implementation.//STDMETHODIMP_(ULONG32) HSPErrorSink::AddRef(){    return InterlockedIncrement(&m_lRefCount);}///////////////////////////////////////////////////////////////////////////  Method://  IUnknown::Release//  Purpose://  Everyone usually implements this the same... feel free to use//  this implementation.//STDMETHODIMP_(ULONG32) HSPErrorSink::Release(){    if (InterlockedDecrement(&m_lRefCount) > 0)    {        return m_lRefCount;    }    delete this;    return 0;}/* *  IHXErrorSink methods */STDMETHODIMP HSPErrorSink::ErrorOccurred(const UINT8 unSeverity,                              const ULONG32   ulHXCode,                            const ULONG32   ulUserCode,                            const char* pUserString,                            const char* pMoreInfoURL                            ){    char HXDefine[256]; /* Flawfinder: ignore */    // Store the code, so we can return it from main()    m_splayer->m_Error = ulHXCode;    switch (unSeverity)    {       case HXLOG_NOTICE:       case HXLOG_INFO:          m_splayer->notifyUser(ulHXCode,                                (pUserString && *pUserString) ? pUserString : "",                                (pMoreInfoURL && *pMoreInfoURL) ? pMoreInfoURL : "" );          break;       case HXLOG_WARNING:       case HXLOG_ERR:       case HXLOG_CRIT:       case HXLOG_ALERT:       case HXLOG_EMERG:          m_splayer->interruptUser(ulHXCode,                                   (pUserString && *pUserString) ? pUserString : "",                                   (pMoreInfoURL && *pMoreInfoURL) ? pMoreInfoURL : "" );          break;    }    ConvertErrorToString(ulHXCode, HXDefine, 256);    m_splayer->print2stdout("Report(%d, %ld, \"%s\", %ld, \"%s\", \"%s\")\n",                      unSeverity,                      ulHXCode,                      (pUserString && *pUserString) ? pUserString : "(NULL)",                      ulUserCode,                      (pMoreInfoURL && *pMoreInfoURL) ? pMoreInfoURL : "(NULL)",                      HXDefine);    return HXR_OK;}voidHSPErrorSink::ConvertErrorToString(const ULONG32 ulHXCode, char* pszBuffer, UINT32 ulBufLen){    IHXErrorMessages* pErrMsg = NULL;    if( !pszBuffer)        return;        pszBuffer[0]='\0';    HX_ASSERT(m_pPlayer);    if( m_pPlayer)    {        m_pPlayer->QueryInterface(IID_IHXErrorMessages, (void**)&pErrMsg);        if( pErrMsg )        {            IHXBuffer* pMessage = pErrMsg->GetErrorText(ulHXCode);            if( pMessage )            {                SafeStrCpy( pszBuffer, (const char*)pMessage->GetBuffer(), (int)ulBufLen);                pMessage->Release();            }            else               m_splayer->print2stderr("NO expansion of error message available\n");        }        else           m_splayer->print2stderr("Unable to get Error Messages\n");    }     HX_RELEASE(pErrMsg);     if( strlen(pszBuffer)==0 )    {        SafeSprintf( pszBuffer, (int) ulBufLen, "Can't convert error code %lu - please find corresponding HXR code in common/include/hxresult.h", (unsigned long)ulHXCode );    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?