Estructura de códigos de error COM

En la ilustración siguiente se muestra el formato de un HRESULT (o SCODE); los números indican posiciones de bits:

Muestra el formato de un

El bit de orden alto de HRESULT o SCODE indica si el valor devuelto representa éxito o error. Si se establece en 0, SEVERITY_SUCCESS, el valor indica que se ha realizado correctamente. Si se establece en 1, SEVERITY_ERROR, indica un error.

Los bits R, C, N y r están reservados.

El campo de instalación indica el servicio del sistema responsable del error. Microsoft asigna nuevos códigos de instalación a medida que sean necesarios. La mayoría de los VALORES SCODEs y HRESULT establecen el campo de instalación en FACILITY_ITF, lo que indica un error de método de interfaz.

Los campos de instalación comunes se describen en la tabla siguiente.

Campo de instalación Valor Descripción
FACILITY_DISPATCH
2
Para errores de interfaz IDispatch de enlace en tiempo de espera.
FACILITY_ITF
4
Para la mayoría de los códigos de estado devueltos por los métodos de interfaz. El significado real del error se define mediante la interfaz . Es decir, dos HRESULTs con exactamente el mismo valor de 32 bits devuelto de dos interfaces diferentes podrían tener significados diferentes.
FACILITY_NULL
0
Para códigos de estado comunes ampliamente aplicables, como S_OK.
FACILITY_RPC
1
En el caso de los códigos de estado devueltos por las llamadas a procedimientos remotos.
FACILITY_STORAGE
3
Para los códigos de estado devueltos por las llamadas de método IStorage o IStream relacionadas con el almacenamiento estructurado. Códigos de estado cuyo valor de código (menos de 16 bits) está en el intervalo de códigos de error ms-DOS (es decir, menos de 256) tienen el mismo significado que el error ms-DOS correspondiente.
FACILITY_WIN32
7
Se usa para proporcionar un medio para controlar los códigos de error de las funciones de la API de Windows como HRESULT. Los códigos de error de OLE de 16 bits que los códigos de error del sistema duplicados también se han cambiado a FACILITY_WIN32.
FACILITY_WINDOWS
8
Se usa para códigos de error adicionales de interfaces definidas por Microsoft.

El campo de código es un número único que se asigna para representar el error o la advertencia.

Por convención, los valores HRESULT suelen tener nombres en el siguiente formato: Facility_Severity_Reason.

La instalación es el nombre de la instalación o algún otro identificador distintivo; La gravedad es una sola letra, S o E, que indica si la llamada de función se realizó correctamente (S) o produjo un error (E); y Reason es un identificador que describe el significado del código. Por ejemplo, el código de estado STG_E_FILENOTFOUND indica que se ha producido un error relacionado con el almacenamiento; en concreto, no existe un archivo solicitado. Los códigos de estado de FACILITY_NULL omiten el prefijo Facility_ .

Los códigos de error se definen en el contexto de una implementación de interfaz. Una vez definidos, los códigos de operación correcta no se pueden cambiar ni agregar nuevos códigos de operación correcta. Sin embargo, se pueden escribir nuevos códigos de error. Microsoft se reserva el derecho de definir nuevos códigos de error (pero no códigos de éxito) para las interfaces descritas en FACILITY_ITF o en nuevas instalaciones.

Control de errores en COM

Protocolos de Windows: HRESULT