Bonjour,

J'ai une classe B héritant d'une classe A de la VCL :

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();
};
methodeB2 contenant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
ShowMessage("avantB1");
methodeB1();
ShowMessage("apresB1");
(ne tenez pas compte des erreurs de syntaxe, j'écris en simplifiant)

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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
B * b = (B *)a;
b->methodeB1 = maMethode;
b->methodeB2();
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.

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