Question

J'appelle des méthodes sur les interfaces WMI / WBEM qui renvoient HRESULTS.Je souhaite afficher à l'utilisateur des messages d'erreur significatifs pour ces codes d'erreur.Cependant, lorsque je recherche le message d'erreur du HRESULT, je n'obtiens que des chaînes comme "IDispatch error # 3598".

Puis-je trouver une liste de ces codes d'erreur IDispatch expliquant leur signification?

Exemple de code où des erreurs peuvent survenir:

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;

Recherche d'erreur:

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

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

Remarque: Cela n'aide pas- il ne contient pas les HRESULTS que je reçois.Ils ne sont pas non plus contenus dans winerror.h.

Était-ce utile?

La solution

Les serveurs COM peuvent générer leurs propres codes d'erreur HRESULT.L'interface IErrorInfo aide un client à obtenir une description de l'erreur.Vous ne donnez pas à la classe _com_error une chance de faire ce travail, vous ne passez pas le pointeur d'interface IErrorInfo au constructeur.

Commencez par QI l'interface pour ISupportErrorInfo et appelez sa méthode InterfaceSupportsErrorInfo () pour vérifier que le rapport d'erreurs est pris en charge.Appelez ensuite GetErrorInfo () pour obtenir le pointeur d'interface IErrorInfo.Les documents MSDN sont ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top