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".