Estrategias de control de errores

Dado que los métodos de interfaz son virtuales, no es posible que un autor de la llamada conozca el conjunto completo de valores que se pueden devolver desde cualquier llamada. Una implementación de un método puede devolver cinco valores; otro puede devolver ocho.

En la documentación se enumeran los valores comunes que se pueden devolver para cada método; estos son los valores que debe comprobar y controlar en el código porque tienen significados especiales. Es posible que se devuelvan otros valores, pero como no son significativos, no es necesario escribir código especial para controlarlos. Una comprobación simple de cero o distinto de cero es adecuada.

Valores HRESULT

El valor devuelto de las funciones y los métodos COM es hrESULT. Los valores de algunos HRESULT se han cambiado en COM para eliminar toda duplicación y superposición con los códigos de error del sistema. Los que duplican los códigos de error del sistema se han cambiado a FACILITY_WIN32 y los que se superponen permanecen en FACILITY_NULL. Los valores HRESULT comunes y sus valores se enumeran en la tabla siguiente.

HRESULT Valor Descripción
E_ABORT
0x80004004
La operación se anuló debido a un error no especificado.
E_ACCESSDENIED
0x80070005
Un error general de acceso denegado.
E_FAIL
0x80004005
Se ha producido un error no especificado.
E_HANDLE
0x80070006
Se usó un identificador no válido.
E_INVALIDARG
0x80070057
Uno o más argumentos no son válidos.
E_NOINTERFACE
0x80004002
El método QueryInterface no reconoció la interfaz solicitada. No se admite la interfaz .
E_NOTIMPL
0x80004001
El método no está implementado.
E_OUTOFMEMORY
0x8007000E
El método no pudo asignar la memoria necesaria.
E_PENDING
0x8000000A
Los datos necesarios para completar la operación aún no están disponibles.
E_POINTER
0x80004003
Se usó un puntero no válido.
E_UNEXPECTED
0x8000FFFF
Se ha producido un error catastrófico.
S_FALSE
0x00000001
El método se realizó correctamente y devolvió el valor booleano FALSE.
S_OK
0x00000000
El método se ha llevado a cabo de forma correcta. Si se espera un valor devuelto booleano, el valor devuelto es TRUE.

Errores de red

Si los cuatro primeros dígitos del código de error son 8007, esto indica un error de red o del sistema. Puede usar el comando net para descodificar estos tipos de errores. Para descodificar el error, primero convierta los cuatro últimos dígitos del código de error hexadecimal en decimal. A continuación, en el símbolo del sistema, escriba lo siguiente, donde el código decimal se reemplaza por el valor devuelto que desea descodificar:

net helpmsg <decimal_code>

El comando net devuelve una descripción del error. Por ejemplo, si COM devuelve el error 8007054B, convierta 054B en decimal (1355). A continuación, escriba lo siguiente:

net helpmsg 1355

El comando net devuelve la descripción del error: "El dominio especificado no existía".

Control de errores en COM