Bonjour,
J'ai une classe B héritant d'une classe A de la VCL :
methodeB2 contenant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class B : public A { public: void __closure * methodeB1(); void methodeB2(); };
(ne tenez pas compte des erreurs de syntaxe, j'écris en simplifiant)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ShowMessage("avantB1"); methodeB1(); ShowMessage("apresB1");
maintenant imaginons que A soit par exemple un TreeView, qui a été instancié dans une forme l'outil de création de forme.
(On appelera "a" l'instance de A)
dans mon code j'ai qqc de la sorte:
et à l'exécution il se trouve que la méthode B2 est belle et bien appelée, que tout s'y déroule bien si ce n'est lors de l'appel à methodeB1 qui déclenche une erreur de type "erreur à l'adresse bidulle" et donc ne rentre jamais dans le corps de maMethode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 B * b = (B *)a; b->methodeB1 = maMethode; b->methodeB2();
D'où ma question :
un closure est-il traité comme une variable de classe (ce qui expliquerait que b doive obligatoirement être une instance de B) ou bien comme une vraie méthode (dans ce cas b peut etre un transtypage d'une instance de A, et je ne vois pas pourquoi ca ne marche pas)
D'avance merci
Partager