-
Dll retournant un objet
Bonjour,
J'ai du code dans un executable qui appel une dll. Cette dll comporte deux fonctions qui instancie/libère un objet de la dll. Le pointeur de l'objet est renvoyé à l'executable qui peut l'utiliser.
Si je modifie le code de mon objet (ajout/suppression de méthodes, implementation) et que je recompile seulement la dll il arrive que mon executable plante. J'imagine que les adresses des méthodes ne sont plus les mêmes dans la nouvelle dll et que l'executable appel des méthodes a des adresses non valides. Est-ce que c'est vraiment le cas ? si oui comment faire pour ne mettre seulement à jour que la dll sans avoir à recompiler l'exe ?
Merci.
-
Si tu modifies des fonctions virtuelles, surtout en ajout, tu fiches le bordel dans la vtable de l'objet -> Plantage obligatoire, impossible à éviter (sauf si les seuls ajouts que tu fais sont à la fin de la classe).
Si tu ne modifies que le contenu des fonctions elles-mêmes, tu ne devrais pas créer de problèmes normalement.
C'est un principe clair une fois que tu programmes en COM : Une fois une interface définie, elle ne doit jamais changer.
-
Merci de ta réponse Medinoc. En fait je n'etais pas certain que ce soit ca.
Ma classe CClass dérive d'une interface CClassInterface ou il y a toutes les méthodes virtuelles, et aucune implémentation. L'objet retourné par la dll est de type CClassInterface. D'après ta réponse si je ne modifie jamais la class d'interface je n'aurai jamais de problèmes ? Peux-tu me comfirmer cela ? Dans ce cas je peux ajouter tranquillement des méthodes à ma CClass.
-
Normalement, en effet, tu n'auras pas de problèmes tant que tu ne modifies pas la classe d'interface.
Un petit rappel aussi: Ce qui est alloué dans la DLL doit être détruit dans la DLL.
-
Je te remercie pour ces réponses précises.
Je suis aussi passé par des problèmes d'allocation/desallocation au début :D , notamment sur des objets stl comme string.