2009-07-13 14 views

Respuesta

63

La clase de excepción "Excepción" se declara en la unidad SysUtils. Por lo tanto, debe agregar "SysUtils" a su cláusula uses.

uses 
    SysUtils; 

procedure RaiseMyException; 
begin 
    raise Exception.Create('Hallo World!'); 
end; 
+3

Para referencia futura, Los errores de "identificador no declarado" se pueden resolver con frecuencia buscando en el código fuente incluido el identificador que le interesa. Esto le indicará dónde se ha declarado y también podría brindar ejemplos de cómo usarlo. –

+14

En D2006 + (¿quizás en 2005?) Puede usar la opción "Refactoring -> Buscar unidad" del menú del botón derecho para agregar la unidad requerida a su cláusula uses. –

+0

Gerry: ¡un fabuloso consejo añadido! ... Me da vergüenza decir que nunca había notado esa característica. Muy genial. :) – Jamo

5

Usted está usando SysUtils ¿no es así? La excepción se declara allí IIRC.

7

Es posible que deba agregar sysutils a la cláusula uses, no está incorporado y es opcional de acuerdo con Delphi en pocas palabras.

10

Recuerde agregar SYSUTILS a sus unidades de usos.

También se sugieren una buena manera de mantener un registro de las categorías, formatos de MENSAJES y significado de excepción:

Type TMyException=class 
public 
    class procedure RaiseError1(param:integer); 
    class procedure RaiseError2(param1,param2:integer); 
    class procedure RaiseError3(param:string); 
end; 

implementation 

class procedure TMyException.RaiseError1(param:integer); 
begin 
    raise Exception.create(format('This is an exception with param %d',[param])); 
end; 

//declare here other RaiseErrorX 

Una forma sencilla de utilizar esto es:

TMyException.RaiseError1(123); 
+4

ya existe 'Exception.CreateFmt' que admite Format con una matriz de const – mjn

+0

@mjn, pero hace que la vida de los clientes (el código que usa' TMyException') sea mucho más fácil: simplemente pase los parámetros y el el resto se realizará en 'TMyException'. –

+1

@EdwinYip lo que quiero decir es que 'raise Exception.create (format ('Esta es una excepción con param% d', [param]));' puede acortarse para 'raise Exception.CreateFmt ('Esta es una excepción con param% d ', [param]); 'que hace lo mismo con menos pulsaciones de teclas – mjn

Cuestiones relacionadas