2009-07-13 7 views

Répondre

63

La classe d'exception "Exception" est déclarée dans l'unité SysUtils. Vous devez donc ajouter "SysUtils" à votre clause uses.

uses 
    SysUtils; 

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

Pour référence ultérieure, Les erreurs de type «identificateur non déclaré» peuvent souvent être résolues en recherchant dans le code source inclus l'identificateur qui vous intéresse. Cela vous dira où il a été déclaré et il pourrait également fournir des exemples d'utilisation. –

+14

Dans D2006 + (peut-être 2005?), Vous pouvez utiliser l'option "Refactoring -> Find Unit" dans le menu contextuel pour ajouter l'unité requise à votre clause uses. –

+0

Gerry - fabuleux conseil ajouté là-bas! ... Je suis gêné de dire, je n'ai jamais remarqué cette fonctionnalité. Très sympa. :) – Jamo

5

Vous utilisez SysUtils n'êtes-vous pas? Exception est déclarée là IIRC.

7

Vous devrez peut-être ajouter sysutils à la clause uses, il n'est pas intégré et est facultatif selon Delphi en un mot.

10

N'oubliez pas d'ajouter SYSUTILS à vos unités uses.

Je vous propose aussi une belle façon de garder une trace des catégories, des formats de messagges et la signification d'exception:

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 

Une façon simple d'utiliser ce système est:

TMyException.RaiseError1(123); 
+4

il y a déjà 'Exception.CreateFmt' qui prend en charge Format avec un tableau de const – mjn

+0

@mjn, mais il rend la vie des clients (le code qui utilise' TMyException') beaucoup plus facile - il suffit de passer les paramètres et la repos sera fait dans 'TMyException'. –

+1

@EdwinYip ce que je veux dire c'est que 'raise Exception.create (format ('Ceci est une exception avec param% d', [param])) 'peut être raccourci à' raise Exception.CreateFmt ('Ceci est une exception avec param% d ', [param]); 'qui fait la même chose avec moins de touches – mjn

Questions connexes