VirtualBox

Changeset 105578 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Aug 2, 2024 1:01:58 PM (6 months ago)
Author:
vboxsync
Message:

FE/Qt: Get and format the IErrorInfo::resultDetail value as it holds the VBox status code in many instances (see setErrorBoth and setErrorVrc in Main), which can be useful to understand a problem.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/globals
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.cpp

    r103538 r105578  
    5050   #ifdefs, we still have to include the definition of the class.
    5151   very silly. */
    52 # if !defined (Q_OS_MAC)  && !defined (Q_OS_OS2)
     52# if !defined(Q_OS_MAC)  && !defined(Q_OS_OS2)
    5353XPCOMEventQSocketListener *COMBase::sSocketListener = 0;
    5454
     
    6565public:
    6666
    67     XPCOMEventQSocketListener (nsIEventQueue *eq)
     67    XPCOMEventQSocketListener(nsIEventQueue *eq)
    6868    {
    6969        mEventQ = eq;
    70         mNotifier = new QSocketNotifier (mEventQ->GetEventQueueSelectFD(),
    71                                          QSocketNotifier::Read, this);
    72         QObject::connect (mNotifier, SIGNAL (activated (int)),
    73                           this, SLOT (processEvents()));
     70        mNotifier = new QSocketNotifier(mEventQ->GetEventQueueSelectFD(), QSocketNotifier::Read, this);
     71        QObject::connect(mNotifier, SIGNAL(activated (int)), this, SLOT(processEvents()));
    7472    }
    7573
     
    8684
    8785    QSocketNotifier *mNotifier;
    88     nsCOMPtr <nsIEventQueue> mEventQ;
     86    nsCOMPtr<nsIEventQueue> mEventQ;
    8987};
    9088
    91 #endif /* !defined (VBOX_WITH_XPCOM) */
     89#endif /* defined(VBOX_WITH_XPCOM) */
    9290
    9391/**
     
    10098    HRESULT rc = com::Initialize(fGui ? VBOX_COM_INIT_F_DEFAULT | VBOX_COM_INIT_F_GUI : VBOX_COM_INIT_F_DEFAULT);
    10199
    102 #if defined (VBOX_WITH_XPCOM)
    103 
    104 # if !defined (RT_OS_DARWIN) && !defined (RT_OS_OS2)
    105 
    106     if (NS_SUCCEEDED (rc))
    107     {
    108         nsCOMPtr <nsIEventQueue> eventQ;
    109         rc = NS_GetMainEventQ (getter_AddRefs (eventQ));
    110         if (NS_SUCCEEDED (rc))
     100#if defined(VBOX_WITH_XPCOM)
     101
     102# if !defined(RT_OS_DARWIN) && !defined(RT_OS_OS2)
     103
     104    if (NS_SUCCEEDED(rc))
     105    {
     106        nsCOMPtr<nsIEventQueue> eventQ;
     107        rc = NS_GetMainEventQ(getter_AddRefs(eventQ));
     108        if (NS_SUCCEEDED(rc))
    111109        {
    112110#  ifdef DEBUG
    113111            BOOL isNative = FALSE;
    114             eventQ->IsQueueNative (&isNative);
    115             AssertMsg (isNative, ("The event queue must be native"));
     112            eventQ->IsQueueNative(&isNative);
     113            AssertMsg(isNative, ("The event queue must be native"));
    116114#  endif
    117115            BOOL isOnMainThread = FALSE;
    118             rc = eventQ->IsOnCurrentThread (&isOnMainThread);
    119             if (NS_SUCCEEDED (rc) && isOnMainThread)
     116            rc = eventQ->IsOnCurrentThread(&isOnMainThread);
     117            if (NS_SUCCEEDED(rc) && isOnMainThread)
    120118            {
    121                 sSocketListener = new XPCOMEventQSocketListener (eventQ);
     119                sSocketListener = new XPCOMEventQSocketListener(eventQ);
    122120            }
    123121        }
    124122    }
    125123
    126 # endif /* !defined (RT_OS_DARWIN) && !defined (RT_OS_OS) */
    127 
    128 #endif /* defined (VBOX_WITH_XPCOM) */
    129 
    130     if (FAILED (rc))
     124# endif /* !defined(RT_OS_DARWIN) && !defined(RT_OS_OS) */
     125
     126#endif /* defined(VBOX_WITH_XPCOM) */
     127
     128    if (FAILED(rc))
    131129        CleanupCOM();
    132130
    133     AssertComRC (rc);
    134 
    135     LogFlowFunc (("rc=%08X\n", rc));
     131    AssertComRC(rc);
     132
     133    LogFlowFunc(("rc=%08X\n", rc));
    136134    LogFlowFuncLeave();
    137135    return rc;
     
    148146    HRESULT rc = S_OK;
    149147
    150 #if defined (VBOX_WITH_XPCOM)
     148#if defined(VBOX_WITH_XPCOM)
    151149
    152150    /* scope the code to make smart references are released before calling
    153151     * com::Shutdown() */
    154152    {
    155         nsCOMPtr <nsIEventQueue> eventQ;
    156         rc = NS_GetMainEventQ (getter_AddRefs (eventQ));
    157         if (NS_SUCCEEDED (rc))
     153        nsCOMPtr<nsIEventQueue> eventQ;
     154        rc = NS_GetMainEventQ(getter_AddRefs(eventQ));
     155        if (NS_SUCCEEDED(rc))
    158156        {
    159157            BOOL isOnMainThread = FALSE;
    160             rc = eventQ->IsOnCurrentThread (&isOnMainThread);
    161             if (NS_SUCCEEDED (rc) && isOnMainThread)
     158            rc = eventQ->IsOnCurrentThread(&isOnMainThread);
     159            if (NS_SUCCEEDED(rc) && isOnMainThread)
    162160            {
    163 # if !defined (RT_OS_DARWIN) && !defined (RT_OS_OS2)
     161# if !defined(RT_OS_DARWIN) && !defined(RT_OS_OS2)
    164162                if (sSocketListener)
    165163                {
     
    172170    }
    173171
    174 #endif /* defined (VBOX_WITH_XPCOM) */
     172#endif /* defined(VBOX_WITH_XPCOM) */
    175173
    176174    HRESULT rc2 = com::Shutdown();
    177     if (SUCCEEDED (rc))
     175    if (SUCCEEDED(rc))
    178176        rc = rc2;
    179177
    180     AssertComRC (rc);
    181 
    182     LogFlowFunc (("rc=%08X\n", rc));
     178    AssertComRC(rc);
     179
     180    LogFlowFunc(("rc=%08X\n", rc));
    183181    LogFlowFuncLeave();
    184182    return rc;
     
    186184
    187185/* static */
    188 void COMBase::ToSafeArray (const QVector <QString> &aVec,
    189                            com::SafeArray <BSTR> &aArr)
    190 {
    191     aArr.reset (aVec.size());
    192     for (int i = 0; i < aVec.size(); ++ i)
    193         aArr [i] = SysAllocString ((const OLECHAR *)
    194             (aVec.at (i).isNull() ? 0 : aVec.at (i).utf16()));
    195 }
    196 
    197 /* static */
    198 void COMBase::FromSafeArray (const com::SafeArray <BSTR> &aArr,
    199                              QVector <QString> &aVec)
     186void COMBase::ToSafeArray(const QVector<QString> &aVec,
     187                          com::SafeArray<BSTR> &aArr)
     188{
     189    aArr.reset(aVec.size());
     190    for (int i = 0; i < aVec.size(); ++ i)
     191        aArr [i] = SysAllocString((const OLECHAR *)(aVec.at(i).isNull() ? 0 : aVec.at(i).utf16()));
     192}
     193
     194/* static */
     195void COMBase::FromSafeArray(const com::SafeArray<BSTR> &aArr,
     196                            QVector<QString> &aVec)
    200197{
    201198    AssertCompile(sizeof(aArr[0][0]) == sizeof(ushort));
    202     aVec.resize (static_cast <int> (aArr.size()));
    203     for (int i = 0; i < aVec.size(); ++ i)
    204         aVec [i] = QString::fromUtf16 ((const char16_t *)aArr [i]);
    205 }
    206 
    207 /* static */
    208 void COMBase::ToSafeArray (const QVector <QUuid> &aVec,
    209                            com::SafeGUIDArray &aArr)
    210 {
    211     AssertCompileSize (GUID, sizeof (QUuid));
    212     aArr.reset (aVec.size());
    213     for (int i = 0; i < aVec.size(); ++ i)
    214         aArr [i] = *(GUID*) &aVec [i];
    215 }
    216 
    217 /* static */
    218 void COMBase::FromSafeArray (const com::SafeGUIDArray &aArr,
    219                              QVector <QUuid> &aVec)
    220 {
    221     AssertCompileSize (GUID, sizeof (QUuid));
    222     aVec.resize (static_cast <int> (aArr.size()));
     199    aVec.resize(static_cast<int>(aArr.size()));
     200    for (int i = 0; i < aVec.size(); ++ i)
     201        aVec[i] = QString::fromUtf16((const char16_t *)aArr[i]);
     202}
     203
     204/* static */
     205void COMBase::ToSafeArray(const QVector <QUuid> &aVec,
     206                          com::SafeGUIDArray &aArr)
     207{
     208    AssertCompileSize(GUID, sizeof(QUuid));
     209    aArr.reset(aVec.size());
     210    for (int i = 0; i < aVec.size(); ++ i)
     211        aArr[i] = *(GUID *)&aVec[i];
     212}
     213
     214/* static */
     215void COMBase::FromSafeArray(const com::SafeGUIDArray &aArr,
     216                            QVector<QUuid> &aVec)
     217{
     218    AssertCompileSize(GUID, sizeof(QUuid));
     219    aVec.resize (static_cast<int>(aArr.size()));
    223220    for (int i = 0; i < aVec.size(); ++ i)
    224221    {
    225222#ifdef VBOX_WITH_XPCOM
    226         aVec [i] = *(QUuid*) &aArr [i];
     223        aVec[i] = *(QUuid *)&aArr[i];
    227224#else
    228225        /* No by-reference accessor, only by-value. So spell it out to avoid warnings. */
     
    234231
    235232/* static */
    236 void COMBase::ToSafeArray (const QVector <QUuid> &aVec,
    237                            com::SafeArray <BSTR> &aArr)
    238 {
    239     aArr.reset (aVec.size());
    240     for (int i = 0; i < aVec.size(); ++ i)
    241         aArr [i] = SysAllocString ((const OLECHAR *)
    242             (aVec.at (i).isNull() ? 0 : aVec.at(i).toString().utf16()));
    243 }
    244 
    245 /* static */
    246 void COMBase::FromSafeArray (const com::SafeArray <BSTR> &aArr,
    247                              QVector <QUuid> &aVec)
     233void COMBase::ToSafeArray(const QVector<QUuid> &aVec,
     234                          com::SafeArray<BSTR> &aArr)
     235{
     236    aArr.reset(aVec.size());
     237    for (int i = 0; i < aVec.size(); ++ i)
     238        aArr[i] = SysAllocString((const OLECHAR *)(aVec.at(i).isNull() ? 0 : aVec.at(i).toString().utf16()));
     239}
     240
     241/* static */
     242void COMBase::FromSafeArray(const com::SafeArray<BSTR> &aArr,
     243                            QVector<QUuid> &aVec)
    248244{
    249245    AssertCompile(sizeof(aArr[0][0]) == sizeof(ushort));
    250     aVec.resize (static_cast <int> (aArr.size()));
    251     for (int i = 0; i < aVec.size(); ++ i)
    252         aVec [i] = QUuid(QString::fromUtf16 ((const char16_t *)aArr [i]));
     246    aVec.resize(static_cast<int>(aArr.size()));
     247    for (int i = 0; i < aVec.size(); ++ i)
     248        aVec[i] = QUuid(QString::fromUtf16((const char16_t *)aArr[i]));
    253249}
    254250
     
    263259        mIsFullAvailable = false;
    264260        mResultCode = S_OK;
     261        mResultDetail = 0;
    265262        m_pNext = NULL;
    266263        AssertMsgFailedReturnVoid(("error info is NULL!\n"));
     
    274271    gotAll &= info.isOk();
    275272
     273    mResultDetail = info.GetResultDetail();
     274    gotSomething |= info.isOk();
     275    gotAll &= info.isOk();
     276
    276277    mInterfaceID = info.GetInterfaceID();
    277278    gotSomething |= info.isOk();
    278279    gotAll &= info.isOk();
    279280    if (info.isOk())
    280         mInterfaceName = getInterfaceNameFromIID (mInterfaceID);
     281        mInterfaceName = getInterfaceNameFromIID(mInterfaceID);
    281282
    282283    mComponent = info.GetComponent();
     
    305306    mIsNull = !gotSomething;
    306307
    307     AssertMsg (gotSomething, ("Nothing to fetch!\n"));
     308    AssertMsg(gotSomething, ("Nothing to fetch!\n"));
    308309}
    309310
     
    315316
    316317    mResultCode = x.mResultCode;
     318    mResultDetail = x.mResultDetail;
    317319    mInterfaceID = x.mInterfaceID;
    318320    mComponent = x.mComponent;
     
    465467
    466468// static
    467 QString COMErrorInfo::getInterfaceNameFromIID (const QUuid &id)
     469QString COMErrorInfo::getInterfaceNameFromIID(const QUuid &id)
    468470{
    469471    QString name;
    470472
    471     com::GetInterfaceNameByIID (COMBase::GUIDIn (id), COMBase::BSTROut (name));
     473    com::GetInterfaceNameByIID(COMBase::GUIDIn(id), COMBase::BSTROut(name));
    472474
    473475    return name;
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.h

    r103803 r105578  
    126126          mIsFullAvailable(false),
    127127          mResultCode(S_OK),
     128          mResultDetail(0),
    128129          m_pNext(NULL)
    129130    {}
     
    151152    }
    152153
    153     bool isNull() const { return mIsNull; }
    154 
    155     bool isBasicAvailable() const { return mIsBasicAvailable; }
    156     bool isFullAvailable() const { return mIsFullAvailable; }
    157 
    158     HRESULT resultCode() const { return mResultCode; }
     154    bool isNull() const RT_NOEXCEPT { return mIsNull; }
     155
     156    bool isBasicAvailable() const RT_NOEXCEPT { return mIsBasicAvailable; }
     157    bool isFullAvailable() const RT_NOEXCEPT { return mIsFullAvailable; }
     158
     159    HRESULT resultCode() const RT_NOEXCEPT { return mResultCode; }
     160    ULONG resultDetail() const RT_NOEXCEPT { return mResultDetail; }
    159161    QUuid interfaceID() const { return mInterfaceID; }
    160162    QString component() const { return mComponent; }
     
    181183
    182184    HRESULT mResultCode;
     185    ULONG mResultDetail;
    183186    QUuid mInterfaceID;
    184187    QString mComponent;
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIErrorString.cpp

    r103710 r105578  
    6969    /** @todo r=bird: See UIErrorString::formatRC for 31th bit discussion. */
    7070    char szHex[32];
    71     RTStrPrintf(szHex, sizeof(szHex), "%#010X", rc);
     71    RTStrPrintf(szHex, sizeof(szHex), "%#010x", rc);
    7272
    7373#ifdef RT_OS_WINDOWS
     
    193193        }
    194194
     195        if (comInfo.resultDetail() != 0)
     196            strFormatted += QString("<tr><td>%1</td><td><tt>%2 (0x%3)</tt></td></tr>")
     197                .arg(QApplication::translate("UIErrorString", "Result&nbsp;Detail:", "error info"))
     198                .arg(QString::number(int(comInfo.resultDetail()))) /* arg(int()) ends up as unsigned, thus the ::number crap. */
     199                .arg(comInfo.resultDetail(), 0, 16);
     200
    195201        if (fHaveComponent)
    196202            strFormatted += QString("<tr><td>%1</td><td>%2</td></tr>")
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette