⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pxerror.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        UINT32 ulNumFormatArgs = CountArguments(pszFormat);        UINT32 ulNumArgs       = 0;        if (pszArg1)        {            ulNumArgs++;        }        if (pszArg2)        {            ulNumArgs++;        }        // Only display the error if the number of arguments match up        HX_ASSERT(ulNumFormatArgs == ulNumArgs);        if (ulNumFormatArgs == ulNumArgs)        {            // Create error string            //            // Max size of error string = strlen(pszFormat) +            //                            strlen(pszArg1)   +            //                            strlen(pszArg2)   + 1            UINT32 ulMaxSize = strlen(pszFormat)               +                               (pszArg1 ? strlen(pszArg1) : 0) +                               (pszArg2 ? strlen(pszArg2) : 0) + 1;            char* pszErr = new char [ulMaxSize];            if (pszErr)            {                switch (ulNumArgs)                {                    case 0:                        strcpy(pszErr, pszFormat); /* Flawfinder: ignore */                        break;                    case 1:                        sprintf(pszErr, pszFormat, pszArg1); /* Flawfinder: ignore */                        break;                    case 2:                        sprintf(pszErr, pszFormat, pszArg1, pszArg2); /* Flawfinder: ignore */                        break;                    default:                        pszErr[0] = '\0';                }                retVal = SetString(pszErr, rpErrStr);            }            HX_VECTOR_DELETE(pszErr);        }    }    HX_RELEASE(pRes);    return retVal;}HX_RESULT PXError::SetError(const char* pszFileName, UINT32 ulErrorID, UINT32 ulLine,                            UINT32 ulCol, const char* pszArg1, const char* pszArg2,                            REF(IHXBuffer*) rpErrStr){    HX_RESULT retVal = HXR_OK;    const char*    pszFormat = NULL;    IHXXResource* pRes      = NULL;    retVal                   = GetErrorResource(ulErrorID, pRes);    if (SUCCEEDED(retVal))    {        pszFormat = (const char*) pRes->ResourceData();    }    else    {        retVal = GetDefaultErrorFormatString(ulErrorID, pszFormat);    }    if (SUCCEEDED(retVal))    {        // Make sure num args provided and num args in format string match up        UINT32 ulNumFormatArgs = CountArguments(pszFormat);        UINT32 ulNumArgs       = 0;        if (pszArg1)        {            ulNumArgs++;        }        if (pszArg2)        {            ulNumArgs++;        }        // Only display the error if the number of arguments match up        HX_ASSERT(ulNumFormatArgs == ulNumArgs);        if (ulNumFormatArgs == ulNumArgs)        {            // Create a new format string from the resource format string            //            const char* pszFormat1 = "(%s): %s (line %lu, column %lu)";            // The max size of the new format string = strlen(pszFormat1)  +            //                                         strlen(pszFileName) +            //                                         strlen(pszFormat)   +            //                                         2*MAX_SIZE_OF_UINT32 string + 1            //                                       = strlen(") + strlen(") + strlen(") + 21;            UINT32 ulMaxSize = strlen(pszFormat1)  +                               strlen(pszFileName) +                               strlen(pszFormat)   + 21;            char* pszFormat2 = new char [ulMaxSize];            if (pszFormat2)            {                // Create the format string                sprintf(pszFormat2, pszFormat1, pszFileName, pszFormat, ulLine, ulCol); /* Flawfinder: ignore */                // Create the error string                //                // The max size of the error string = strlen(pszFormat2) +                //                                    strlen(pszArg1)    +                //                                    strlen(pszArg2)    + 1                ulMaxSize = strlen(pszFormat2) +                            (pszArg1 ? strlen(pszArg1) : 0) +                            (pszArg2 ? strlen(pszArg2) : 0) + 1;                char* pszErr = new char [ulMaxSize];                if (pszErr)                {                    switch (ulNumArgs)                    {                        case 0:                            strcpy(pszErr, pszFormat2); /* Flawfinder: ignore */                            break;                        case 1:                            sprintf(pszErr, pszFormat2, pszArg1); /* Flawfinder: ignore */                            break;                        case 2:                            sprintf(pszErr, pszFormat2, pszArg1, pszArg2); /* Flawfinder: ignore */                            break;                        default:                            pszErr[0] = '\0';                    }                    retVal = SetString(pszErr, rpErrStr);                }                HX_VECTOR_DELETE(pszErr);            }            HX_VECTOR_DELETE(pszFormat2);        }    }    HX_RELEASE(pRes);    return retVal;}HX_RESULT PXError::GetErrorResource(UINT32 ulErrorID, REF(IHXXResource*) rpResource){    HX_RESULT retVal = HXR_OK;    if (m_pContext)    {        IHXExternalResourceManager* pMgr = NULL;        retVal = m_pContext->QueryInterface(IID_IHXExternalResourceManager, (void**) &pMgr);        if (SUCCEEDED(retVal))        {            IHXExternalResourceReader* pRdr = NULL;            retVal = pMgr->CreateExternalResourceReader(CORE_RESOURCE_SHORT_NAME, pRdr);            if (SUCCEEDED(retVal))            {                IHXXResource* pRes = pRdr->GetResource(HX_RT_STRING, ulErrorID);                if(pRes)                {                    HX_RELEASE(rpResource);                    rpResource = pRes;                    rpResource->AddRef();                }                else                {                    retVal = HXR_FAIL;                }                HX_RELEASE(pRes);            }            HX_RELEASE(pRdr);        }        HX_RELEASE(pMgr);    }    else    {        retVal = HXR_UNEXPECTED;    }    return retVal;}HX_RESULT PXError::GetDefaultErrorFormatString(UINT32 ulErrorID, REF(const char*) rpszFormat){    HX_RESULT retVal = HXR_FAIL;    // Search the table    PXErrorString* pErr = (PXErrorString*) m_pErrorTable;    while (pErr->m_pszString)    {        if (ulErrorID == pErr->m_ulStringID)        {            break;        }        pErr++;    }    // Assign the out parameter    if (pErr->m_pszString)    {        rpszFormat = pErr->m_pszString;        retVal     = HXR_OK;    }    return retVal;}HX_RESULT PXError::SetString(const char* pszErr, REF(IHXBuffer*) rpErrStr){    HX_RESULT retVal = HXR_OK;    if (m_pContext)    {        IHXCommonClassFactory* pFactory = NULL;        retVal = m_pContext->QueryInterface(IID_IHXCommonClassFactory,                                            (void**) &pFactory);        if (SUCCEEDED(retVal))        {            IHXBuffer* pBuffer = NULL;            retVal = pFactory->CreateInstance(CLSID_IHXBuffer, (void**) &pBuffer);            if (SUCCEEDED(retVal))            {                retVal = pBuffer->Set((const unsigned char*) pszErr,                                      strlen(pszErr) + 1);                if (SUCCEEDED(retVal))                {                    HX_RELEASE(rpErrStr);                    rpErrStr = pBuffer;                    rpErrStr->AddRef();                }            }            HX_RELEASE(pBuffer);        }        HX_RELEASE(pFactory);    }    else    {        retVal = HXR_UNEXPECTED;    }    return retVal;}UINT32 PXError::CountArguments(const char* pszFormat){    UINT32 ulRet = 0;    if (pszFormat)    {        char* pszPct = (char*) pszFormat;        do        {            pszPct = (char*)strchr((const char*) pszPct, '%');            if (pszPct)            {                ulRet++;                pszPct++;            }        }        while (pszPct);    }    return ulRet;}

⌨️ 快捷键说明

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