Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1794 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Fonction appelante

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction appelante

n°405734
Poulou
Posté le 23-05-2003 à 11:57:52  profilanswer
 

Bon c encore moi, vous allez me trouver pénible à tout le temps poser des questions, mais promis je fais des recherches avant, que ce soit dans la doc papier ou dans l'aide en ligne mais impossible de trouver ce que je veux (enfin j'en trouve mais dans ce cas je pose pas de questions donc vous vous en rendez pas compte !). Et google, j'ai pas vraiment Internet (quand je poste, je suis obligé de changer de pièce, de débrancher un fax, de me connecter en 56k... Bref c pas le top !) donc difficile de l'utiliser !
 
Cette fois-ci je gère les erreurs lors de l'appel de fonctions. J'ai créé une fonction qui permet d'afficher un message d'erreur (ct mieux ainsi, étant donné qu'elle est potentiellement appelée très souvent). Pour l'instant j'affiche le code de l'erreur mais j'aimerai également afficher le nom de la fonction qui l'a appelée.
Je m'explique :

Code :
  1. procedure erreur_appel(code_erreur:integer) ;
  2. begin
  3.   messagedlg('Erreur lors de l''appel d''une fonction'+chr(13)+chr(10)+chr(13)+chr(10)+
  4.     'Code erreur : '+IntToStr(code_erreur),mtError,[mbOK],0);
  5. end;
  6. function mafonc(...):integer ;
  7. begin
  8.   retour_:=Autre_fct(param);
  9.   if retour=0 then
  10.   begin
  11.     // C tt bon, je fais mon tralala
  12.     mafonc:=1;
  13.   end
  14.   else
  15.   begin 
  16.     erreur_appel(retour);
  17.     mafonc:=0;
  18.   end;
  19. end;


Donc ça ça fonctionne, mais ce que j'aimerai pouvoir faire c également affiché le nom de la fonction où a eu l'erreur, genre ici "mafonc". Je peux bien sur le faire en rajoutant un paramètre "nom_fonction: string" mais ça m'oblige à chaque appel à l'écrire en dur... D'où ma question (on y arrive !), est-ce qu'il y a un moyen de connaitre le nom de la focntion appelante automatiquement ? Bref ct long mais la réponse tient en un mot !
 
Puisque j'y suis, c pas possible de faire affectation et test sur la même ligne, dans le genre : if (retour_SIS:=SIS_AjouterGroupe(1130))=0 (ça ça marche pas, c pour ça que je demande !)
Puisque j'y suis deuxième, y'a pas mieux que le chr(13)+chr(10) pour passer à la ligne ?!
Merci pour tout !

mood
Publicité
Posté le 23-05-2003 à 11:57:52  profilanswer
 

n°405739
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-05-2003 à 12:05:31  profilanswer
 

alors,
- à ma connaissance, il n'y a pas moyen de récupérer le nom de la fonction appelante
- pour l'affectation+comparaison comme en C & PHP, je ne pense pas que ça fonctionne
- tu peux utiliser #13#10 (sans + entre les deux, juste des plus des deux côtés pour le concaténer aux chaînes avant et après), c'est plus court que chr(13)+chr(10). Ou aussi la constante sLineBreak qui a l'avantage de te renvoyer juste #10 si jamais tu es sous Linux (pour faire du code portable donc)
 
Pour ton  
'Erreur lors de l''appel d''une fonction'+chr(13)+chr(10)+chr(13)+chr(10)+
  'Code erreur : '+IntToStr(code_erreur)
 
je ferais :
Format('Erreur lors de l''appel d''une fonction%0:s%0:sCode erreur : %d', [sLineBreak, code_erreur]);


Message édité par antp le 23-05-2003 à 12:05:45

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°405740
zion
Plop
Posté le 23-05-2003 à 12:05:50  profilanswer
 


1. Avoir le nom?
Oui et non, tu peux en ayant la table des symboles (un bon gros fichier debug) et en reprennant l'adresse sur le stack pour voir qui a apellé la fonction mais ca te fera bcp bcp bcp plus de code que defiler le nom de la fonction ;)
 
Par contre tu ferais mieux de regarder du côté des Assert() et raise Exception.Create, mais probablement que l'Assert te sera plus utile.
 
2. Retour à la ligne?
sLineBreak
 


---------------
Informaticien.be - Lancez des défis à vos amis
n°405777
Poulou
Posté le 23-05-2003 à 12:30:20  profilanswer
 

Merci bien à tous les 2
Après mures réflexions, je vais pas étudier la table des symboles machin tt ça et je vais rajouter un petit string... :)
Effetcivement antp, ton Format('Erreur lors de l''appel d''une fonction%0:s%0:sCode erreur : %d', [sLineBreak, code_erreur]); est quand même plus joli que ce que j'avais mis !

n°405785
Ciler
Posté le 23-05-2003 à 12:39:25  profilanswer
 

Je me mouille peut-etre un peu mais est-ce qu'un
 

Code :
  1. try
  2.   Autre_fct(param);
  3.   // si ca passe, continuer a executer
  4.   mafonc:=1;
  5. except
  6.   on <type d'erreur> do <traitement>;
  7.   mafonc:=0;
  8. end;


 
ne serait pas plus efficace ?


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
n°405805
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-05-2003 à 12:46:37  profilanswer
 

bah c'est une gestion d'erreur avec exceptions plutôt que codes d'erreurs, je sais pas si l'un est plus efficace que l'autre (et ça dépend ce qu'on entend par efficace :D)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Fonction appelante

 

Sujets relatifs
fonction "execute"Comment faire en sorte de tester la fonction mail lorsqu'on utilise EA
exemple de fonction roundup pour VBA[JS] fonction replace()
[VB.net] une fonction pour terminer le programme [resolu]Modifier la fonction DoDataExchange() pour personnaliser les DDV
Questrion fonction SI[C] fonction pour récupérer l'adresse MAC de eth0
fonction XML relounom de la fonction appelante
Plus de sujets relatifs à : Fonction appelante


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR