Pregunta

Estoy llamando métodos en interfaces WMI/WBEM que devuelven HRESULTS. Quiero mostrar mensajes de error significativos para estos códigos de error al usuario. Sin embargo, cuando busco el mensaje de error de HRESULT, solo obtengo cadenas como "Error de Idispatch #3598".

¿Puedo encontrar una lista de estos códigos de error de Idispatch que explican su significado?

Código de ejemplo donde pueden ocurrir errores:

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;

Buscador de error:

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

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

Nota: Este no ayuda: no contiene los hresults que obtengo. Tampoco están contenidos en Winerror.h.

¿Fue útil?

Solución

Los servidores COM pueden generar sus propios códigos de error HRESULT. La interfaz ierrorInfo ayuda a un cliente a obtener una descripción del error. No le está dando a la clase _com_error la oportunidad de hacer ese trabajo, no pasa el puntero de la interfaz ierrorinfo al constructor.

Primero Qi la interfaz para isupporterRorInfo y llame a su método interfacesupportsErrorInfo () para verificar que se admite el informe de errores. Siguiente llamada getErrorInfo () para obtener el puntero de interfaz ierrorinfo. MSDN DOCS están aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top