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 :

Instruction Class Of


Sujet :

Langage Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut Instruction Class Of
    Je voudrai pouvoir traiter TClass comme un pointeur. Dans le sens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    a: TClass;
    p: Pointer;
     
    p := Pointer(a);
    Ca marche.
    Cependant dans le sens
    Ca ne marche pas. En quoi dois-je transtyper mon pointeur ?

    Imaginons que j'ai transtypé de cette manière 2 pointeurs différents, comment tester s'il s'agit de la même classe ou si l'une est un descendant de l'autre ??

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    Ca m'interesserai de pouvoir non seulement comparer 2 types mais aussi de récupérer un truc que je puisse typecaster en class of TObject.

  3. #3
    Membre du Club Avatar de philemon_siclone
    Inscrit en
    Septembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 67
    Points : 67
    Points
    67
    Par défaut
    Ca ne marche pas.
    Qu'entends-tu pas là ? A la compil ? à l'execution ? Quel est le message d'erreur ? etc.

    Théoriquement, tu peux tout à fait le faire puisque (en Delphi5 en tout cas) la méthode classType() renvoie un pointeur sur la VMT. Donc peux sans problème le transtyper en pointeur. Tu dois même pouvoir comparer directement les pointeurs, mais évidemment ça te permettra seulement de savoir si il s'agit exactement des mêmes classes (pas si elles héritent l'une de l'autre).

    En pratique, chez moi, ça a l'air de marcher. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    var c : TClass;
    c2 : TClass;
    p : pointer;
    begin
      c := button1.ClassType;
      p := pointer(c);
      c2 := TClass(p);
      showmessage(c2.ClassName);
    end;
    Cordialement,

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    A la compil. Apperement je me suis planté dans ce que j'ai écris. La fatigue sans doute

    class of MyObject c'est un pointeur sur la VMT ?? c'est bien ça ?

  5. #5
    Membre du Club Avatar de philemon_siclone
    Inscrit en
    Septembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 67
    Points : 67
    Points
    67
    Par défaut
    class of MyObject c'est un pointeur sur la VMT ?? c'est bien ça ?
    Ouaip; en tout cas quand je regarde le code de classType() c'est ce qu'il me semble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    asm
            mov     eax,[eax]
    end;
    Juste pour info (je ne sais si tu le sais), la VMT en Delphi contient beaucoup plus de données que simplement la liste des adresses des methodes virtuelles. Par exemple : liste des methodes dynamiques, liste des interfaces, liste et types des primitives publiées, nom de la classe, un pointeur vers la VMT parente (logique), etc, etc.
    En espérant que tout ça te sera utile,

    Phil,

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    Merci.

    C'est toujours utile de comprendre ce qui se passe dans le code.

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

Discussions similaires

  1. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  2. Instruction catch et classes dérivées.
    Par emmr.rida dans le forum C++
    Réponses: 15
    Dernier message: 24/06/2009, 12h20
  3. Instruction SIMD, classe F32vec4
    Par beleys dans le forum C++
    Réponses: 2
    Dernier message: 26/05/2008, 09h36
  4. Instruction class pouet;
    Par oodini dans le forum C++
    Réponses: 1
    Dernier message: 21/03/2007, 19h20
  5. Réponses: 31
    Dernier message: 30/03/2006, 16h57

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