Share via


Control de errores desconocidos

Es legal devolver un código de estado solo desde la implementación de un método de interfaz autorizada como legalmente devuelto. Si no se observa esta regla, se invita a la posibilidad de conflicto entre los valores devueltos de código de error y los aprobados por la aplicación. Preste especial atención a este posible problema al propagar códigos de error de funciones a las que se llama internamente.

Las aplicaciones que llaman a interfaces deben tratar cualquier código de error devuelto desconocido (en lugar de un código correcto) como sinónimo de E_UNEXPECTED. Esta práctica de controlar códigos de error desconocidos es necesaria para los clientes de las funciones y interfaces definidas por COM. Dado que la práctica de programación típica consiste en controlar con detalle algunos códigos de error específicos y tratar el resto de forma genérica, este requisito de control de códigos de error inesperados o desconocidos se cumple fácilmente.

Es importante controlar todos los posibles errores al llamar a un método de interfaz. Si no lo hace, la aplicación se bloquea, los datos dañados o se vuelven vulnerables a las vulnerabilidades de seguridad. En el ejemplo de código siguiente se muestra la manera recomendada de controlar errores desconocidos:

HRESULT hr; 
hr = xxMethod(); 
 
switch (GetScode(hr))  
{ 
    case NOERROR: 
      // Method returned success. 
      break; 
 
    case x1: 
      // Handle error x1 here.
      break; 
 
    case x2: 
      // Handle error x2 here.
      break; 
 
    case E_UNEXPECTED: 
    default: 
      // Handle unexpected errors here. 
      break; 
} 
 

La siguiente comprobación de errores se suele usar con esas rutinas que no devuelven nada especial (aparte de S_OK o algún error inesperado):

if (xxMethod() == NOERROR) 
{
    // Handle success here.
} 
else 
{
    // Handle failure here.
} 

Control de errores en COM