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

Langage Delphi Discussion :

Comment obtenir l'adresse d'une méthode dans sa propre implémentation ?


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Comment obtenir l'adresse d'une méthode dans sa propre implémentation ?
    Bonjour à tous ;

    je cherche comment d'obtenir l'adresse d'une méthode dans sa propre implémentation. C'est à dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function MyObject.MyMethod:integer
    var P: Pointer;
    begin
      // pseudo-code
      P := addr(this_method);  
    end;
    C'est le "addr(this_mehod)" que je voudrais remplacer par qqch

    Merci et comme d'hab à charge de revanche

    ____________________________
    [Balise code rajouté par Lil_jam63]

  2. #2
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Bonjour et bien venue sur les forums de Developpez.com.
    Pense à utiliser les balises à ta disposition qui rendent ton post plus compréhensible et agréable à lire merci.

    Pour ton soucis, je pense que c'est celà que tu cherches à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var
      Proc : procedure Of Object;
      //Proc : Function(x,y:Integer):Integer Of Object; // si c'est une fonction, ce qui implique que toutes tes fonctions possèdent le même prototype, ex: additionne(x, y: integer);  multiplie(x, y: integer); etc...
    begin
      @Proc := MethodAddress('leNomDeTaMethode');
      If @Proc<>Nil Then
        Proc // on execute cette methode ou tu fais ce que tu veux avec
      Else
        ShowMessage('Procedure ou fonction inexistante !');
    end;
    sinon soit plus explicite, "remplacer par qqch" est assez vague comme explication.
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Pointeur de méthodes
    Merci à toi de ta rapide réponse et de tes conseils de rédaction que je suivrai.

    En fait, je connaissais ton tip. Mais je vais essayer de mieux décrire mon problème .

    Je dispose d'une fonction qui centralise toutes les gestions d'exceptions. Toutes les méthodes de tous les objets de mon programme appellent ce gestionnaire d'exceptions centralisé, dans la partie "except" d'un "try..except..end". Pour que mon gestionnaire d'exceptions soit parlant, je lui passe en paramètre en dur (en toutes lettres via un string) le nom de la méthode appelante, et ce à chaque fois.

    Comme c'est fastidieux, ennuyeux à maintenir et à dire vrai pas très élégant, je cherchais un moyen de passer en paramètre non pas la chaîne du nom de la méthode appelante, mais une routine qui détermine ce nom automatiquement, ce qui me permettrait de systématiser, donc d'industrialiser, l'appel au gestionnaire d'exceptions.

    La voie que je tente est celle de la méthode MethodName de TObject. Or celle-ci nécessite un pointeur sur la méthode concernée pour retourner son nom. C'est précisément ce pointeur que je cherchais à obtenir avec ma première question certes un peu "elliptique"...

    PS : Il y a du code qui fait cela dans la JCL (Jedi Code Lib), mais ce code est touffu et volumineux, alors avant d'en extraire juste ce dont j'ai besoin, je postais pour savoir si qqun avait déjà résolu ce pb qui doit finalement être assez courant.

    Merci du temps que tu (vous) prendras )à me répondre.

    Bonne journée.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    MethodName et MethodAddress ne fonctionnent je crois que pour les méthodes publiées, de toute façon
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Citation Envoyé par tourlourou
    MethodName et MethodAddress ne fonctionnent je crois que pour les méthodes publiées, de toute façon
    Exact.
    Dans le cas des évènements, par défaut ils ne sont pas publiés mais seulement publics. Il faut créer la section Published manuellement et y déplacer la déclaration des évènements.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/05/2012, 20h58
  2. Comment obtenir la somme d'une colonne dans Listview
    Par Jonathan31 dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/01/2011, 11h46
  3. Réponses: 3
    Dernier message: 22/09/2009, 12h45
  4. Réponses: 1
    Dernier message: 19/11/2008, 18h22
  5. comment retrouver une méthode dans la javadoc?
    Par pracede2005 dans le forum Langage
    Réponses: 2
    Dernier message: 26/10/2006, 16h47

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