Domanda

Sto chiamando metodi sulle interfacce WMI/WBEM che restituiscono HResults. Voglio visualizzare messaggi di errore significativi per questi codici di errore all'utente. Tuttavia, quando cerco il messaggio di errore di HreSult, ricevo solo stringhe come "Errore IdisPatch #3598".

Dove posso trovare un elenco di questi codici di errore IdisPatch che spieghi il loro significato?

Codice di esempio in cui possono verificarsi errori:

IWbemLocator *pLocator = NULL;
IWbemServices *pNamespace = NULL;
hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLocator);
if (FAILED(hr))
   return hr;

hr = pLocator->ConnectServer(wPath, NULL, NULL, NULL, 0, NULL, NULL, &pNamespace);
if(FAILED(hr))
   return hr;

Ricerca di errore:

CString sMessage = _com_error(nError).ErrorMessage();

// sMessage now contains a string like "IDispatch error #3598"

Nota: Questo Non aiuta: non contiene gli hresult che ottengo. Né sono contenuti in Winerror.H.

È stato utile?

Soluzione

I server COM possono generare i propri codici di errore HResult. L'interfaccia Ierrorinfo aiuta un client a ottenere una descrizione dell'errore. Non stai dando alla classe _com_error la possibilità di fare quel lavoro, non si passa il puntatore dell'interfaccia Ierrorinfo al costruttore.

First Qi L'interfaccia per isupporterroRINFO e chiama il suo metodo interfacesupportserrorinfo () per verificare che il reporting degli errori sia supportato. Avanti Chiama GetErroRINFO () per ottenere il puntatore dell'interfaccia IerroRINFO. MSDN DOCS sono qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top