IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Nom de la proc (ou func) courante


Sujet :

Delphi

  1. #1
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut Nom de la proc (ou func) courante
    Hi,

    Après une petite recherche infructueuse sur le web, je me permet de vous poser cette question qui risque de sembler bien ridicule mais bon...

    Comment récupère t'on le nom de la procédure ou fonction où l'on se trouve ?

    Par ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure maProcAMoi;
    begin
      showMessage('Coucou, je suis dans ' + ???);
    end;
    Le résultat serait un message affichant "Coucou, je suis dans maProcAMoi".

    C'est le "???" qui me pose problème. Doit bien y avoir un truc tout bête mais...

    Merci.

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 168
    Points : 120
    Points
    120
    Par défaut
    salutations =)
    Bon Delphi en lui meme n'est pas capable de faire sa , mais tu peut ruser en faisant sa par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure MaProc;
    const Name = 'MaProc';
    Begin
    ShowMessage('Bonjours je me trouve dans '+Name);
    End;
    Ou alors utilise la JVCL et renseigne toi sur la fonction ProcByLevel de JCLDebug !

  3. #3
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Salut,

    merci, mais tu comprends bien que mettre en dur le nom de la proc dans une variable ou un constante puis de m'en servir pour l'afficher, un je l'aurais trouvé ... deux c'est pas du tout ce que je veux faire...

  4. #4
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 168
    Points : 120
    Points
    120
    Par défaut
    Ou alors utilise la JVCL et renseigne toi sur la fonction ProcByLevel de JCLDebug !
    Lui peut faire ce que tu veut!

  5. #5
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par 0x44-0x43-0x53-0x43 Voir le message
    Lui peut faire ce que tu veut!
    J'ai trouvé ça comme définition:

    JVCL
    Un article de Wikipédia, l'encyclopédie libre.
    Aller à : Navigation, rechercher

    JVCL ou JEDI Visual Component Library est une bibliothèque VCL destinée aux EDI Borland (maintenant CodeGear, principalement à Delphi. Avec plus de 500 composants visuels et non visuels c'est la plus importante et la plus active des bibliothèque Open Source elle est distribuée sous licence Mozilla Public Licence Version 1.1.


    Moi j'ai pas envie d'alourdir l'appli sur la quelle je bosse déjà assez grosse comme ça... avec une bibliothèque de 500 composants visuels dont je n'ai même pas besoin... je veux juste le nom de la procédure courante...

    Y'a vraiment pas d'autres solutions !?

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 168
    Points : 120
    Points
    120
    Par défaut
    Delphi n'est pas capable de faire sa a la base , c'est pas comme sous linux avec un simple pwd :p.
    Donc pour moi il n'y a pas d'autre solution apres peut etre que je me trompe!

  7. #7
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par 0x44-0x43-0x53-0x43 Voir le message
    Delphi n'est pas capable de faire sa a la base , c'est pas comme sous linux avec un simple pwd :p.
    Donc pour moi il n'y a pas d'autre solution apres peut etre que je me trompe!
    Que le ciel t'entende...

  8. #8
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 168
    Points : 120
    Points
    120
    Par défaut
    Citation Envoyé par peter27x Voir le message
    Que le ciel t'entende...
    ? de ?

  9. #9
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    bon ben voilà je viens de numéroter les messages concernés de la classe en question... 91 quand même un à un à la mimine ! Vive les bonnes vieilles méthodes, d'abord un p'tit ctr-R, ... puis un p'tit ctrl-F ... puis des F3... enfin j'mé comprends !

  10. #10
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    vulgairement :

    en delphi, quand tu compile le programme, tu perd tout identifiant textuel de fonction, variable, constante, etc.

    tout devient référence sur adresse 32bits.

    sinon les programmes serait trop lourd.

    en théorie, il y'a une possibilité avec la clause "exports" au seins de l'unit.

    logiquement (non testé) la clause exports permet de garde le nom d'une procedure ou fonction dans l'executable, tout comme dans une DLL!

    je ne sais plus trop si le format est :
    index@identifiant ou identifiant@index.

    ensuite, soit au moyen d'une liste, soit par un autre moyen de méthode de dérrière les fagots, on doit pouvoir retrouver le nom de la méthode, en comparant les adresses.

  11. #11
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 763
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 763
    Points : 13 381
    Points
    13 381
    Par défaut
    S'il s'agit de faciliter le debuggage, tu peux utiliser Assert. Ca ne renvoi pas le nom de la fonction, mais au minimum l'unité incriminée et le numéro de ligne.

  12. #12
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    S'il s'agit de faciliter le debuggage, tu peux utiliser Assert. Ca ne renvoi pas le nom de la fonction, mais au minimum l'unité incriminée et le numéro de ligne.
    Ha oui c'est déjà pas mal ça.

  13. #13
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Non sans mal, j'ai trouver une astuce ... l'implementation reste ... simple, mais necessite l'utilisation d'une unité supplementaire.

    ici le projet iFunc, montre :

    1: comment appeler des fonction via leurs nom (string)
    2: comment recuperer la table des exportations
    3: comment recuperer l'adresse d'une fonction dans la dite fonction.

    tout est commenté ou presque.

    la gestion des erreurs via Assert ou Raise Exception reste aussi une bonne idée ... pour afficher et gerer les erreurs.

    pour un log sur logiciels version Beta/Experimentale peut utilise l'implementation demontrée dans le zip.
    elle permet par exemple de créer soit une message (log ou boite de dialogue) de ce genre (exemple) :

    Code null : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Log
    -> enter function iAdd @ 0x00064120 :
        parameters A=20, B=30
        result is 50
    <- exit function iAdd
    -> enter function iMul @ 0x00064230 :
        parameters A=9, B=9
        result is 81
    <- exit function iMul
    -> enter function iDiv @ 0x00064400 :
        parameters A=55, B=0
        Warning : iDiv make exception "divide by zero", result set at -1
    <- prematured exit function iDiv
    Fichiers attachés Fichiers attachés

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262

  15. #15
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    le problème n'est pas vraiment le même.

    comme je l'ai dis plus haut :

    Assert/Exception c'est bien, pour gérer les erreurs.


    ici c'est pour les fonctions qui sont hors modèle objet et hors exception.

    : appel de fonction par leurs nom (hors classes) :

  16. #16
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 763
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 763
    Points : 13 381
    Points
    13 381
    Par défaut
    Delphi, ce n'est pas que de l'objet...
    Par contre, ce qui est sûr, c'est que c'est un langage compilé et non interprété. Connaitre le nom de la fonction n'a aucun intérêt si ce n'est à des fins de debuggage.

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/09/2008, 16h30
  2. Réponses: 3
    Dernier message: 23/04/2008, 14h00
  3. Réccuperer le nom du pc de l'utilisateur courant
    Par maverick91 dans le forum Access
    Réponses: 3
    Dernier message: 22/06/2007, 12h25
  4. Nom du jour de la date courante
    Par orzra dans le forum C#
    Réponses: 2
    Dernier message: 07/06/2007, 13h05
  5. Nom de directory contenant la date courante
    Par Amnesiak dans le forum Linux
    Réponses: 2
    Dernier message: 29/11/2005, 07h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo