Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Casi todas las funciones COM y los métodos de interfaz devuelven un valor del tipo HRESULT. El HRESULT (el nombre se puede leer como "identificador de resultados") es una manera de devolver un valor correcto, de advertencia o de error. Un HRESULT no es realmente un identificador (vea ¿Por qué HRESULT comienza con H cuando no es un identificador?); es solo un valor con varios campos codificados en él. Según la especificación COM, un resultado de cero indica que se ha realizado correctamente y un resultado distinto de cero indica un error.
Importante
Compruebe siempre los valores devueltos de HRESULT. Nunca omita el valor devuelto de una función COM. Use las FAILED() macros y SUCCEEDED() (definidas en <winerror.h>): no compare directamente con S_OK, ya que los códigos de éxito distintos de S_OK existen (por ejemplo, S_FALSE):
// ✅ Correct — handles all failure codes
HRESULT hr = pStream->Read(buffer, cbSize, &cbRead);
if (FAILED(hr)) {
// Handle error
return hr;
}
// ❌ Wrong — misses failure codes that aren't E_FAIL
if (hr == E_FAIL) { ... }
// ❌ Wrong — S_FALSE is success but != S_OK
if (hr != S_OK) { /* this fires for S_FALSE too */ }
Asistentes modernos para el control de errores:
-
THROW_IF_FAILED(hr): Windows Bibliotecas de implementación (wil) produce una excepción de C++ en caso de error. -
winrt::check_hresult(hr): equivalente de C++/WinRT, producewinrt::hresult_error -
LOG_IF_FAILED(hr): macro que registra el error, pero continúa la ejecución.
En el nivel de código fuente, todos los valores de error constan de tres partes, separadas por caracteres de subrayado. La primera parte es el prefijo que identifica la instalación asociada al error, la segunda parte es E para el error y la tercera es una cadena que describe la condición real. Por ejemplo, se devuelve STG_E_MEDIUMFULL cuando no queda espacio en un disco duro. El prefijo STG indica la instalación de almacenamiento, el E indica que el código de estado representa un error y el MEDIUMFULL proporciona información específica sobre el error. Muchos de los valores que puede que desee devolver de un método o función de interfaz se definen en Winerror.h.
Para obtener más información sobre el control de errores, consulte las secciones siguientes:
- estructura de códigos de error COM
- códigos de en FACILITY_ITF
- usar macros para el control de errores
- control de errores COM en Java y Visual Basic
- estrategias de control de errores
- control de errores desconocidos
Temas relacionados