aztcaLISS
Messages postés91Date d'inscriptionsamedi 3 mai 2003StatutMembreDernière intervention25 avril 2008
-
22 avril 2008 à 20:34
aztcaLISS
Messages postés91Date d'inscriptionsamedi 3 mai 2003StatutMembreDernière intervention25 avril 2008
-
23 avril 2008 à 22:44
Salut,
J'ai créé une DLL.
Dans cette DLL il y a une fonction qui me permet d'instancier une classe et de me retourner cette nouvelle instance comme ceci:
return new CClass;
Dans une application "exe", j'appel cette fonction pour récupérer la nouvelle instance de la classe. Tout fonctionne très bien et je peux utiliser parfaitement l'instance de la classe CClass.
Mon problème vient lorsque je veux détruire, avec delete, cette instance dans mon application "exe". Lorsque je fais le delete une erreur d'exeption survient.
Je veux savoir s'il est possible de faire un delete sur un objet qui a été créé dynamiquement à partir d'une DLL ou cet objet doit être détruit dans la DLL elle-même.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 22 avril 2008 à 21:28
en effet, ça doit être à cause de la CRT qui est dédoublée puisqu'il y a deux compilations séparées et indépendantes; du coup la gestion de la mémoire est effectuée indépendemment pour la dll et pour l'exe.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 22 avril 2008 à 21:32
Dans ce cas comment pourrait-il utiliser l'objet alloué dans la DLL depuis l'exe? Je pense de l'espace de mémoire est partagé, et donc le delete devrait fonctionner...
Mais dans tous les cas, je maintien que c'est pas logique de faire le delete dans l'exe
J'ai moi aussi une classe de base. La classe de ma DLL hérite de cette classe de base.
Donc quand j'appelle ma fonction "CreateInstance" (fonction de la DLL), celle-ci me renvoie une nouvelle instance de la classe enfant.
Puisque l'exe connait la classe de base, je peux donc manipuler cette instance.
Ensuite quand j'ai terminé d'utiliser cet objet je le détruit avec delete.
Qu'est-ce que vous pensez de ce tutoriel?
Peut-être que mon erreur provient d'ailleur. Je pensais que ça aurait pu provenir du destructeur, mais il est vide.
azt
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 23 avril 2008 à 21:44
vecchio : bien sûr, l'espace mémoire est le même (sinon on ne pourrait pas utiliser l'instance de classe du tout dans l'exe).
Mais je parlais des opérations annexes effectuées par new (sans savoir trop de quoi il s'agit d'ailleurs : peut-être le stockage de la taille allouée pour utilisation avec delete, ou un système de gestion de la mémoire pour optimiser les allocations...)
aztcaLISS
Messages postés91Date d'inscriptionsamedi 3 mai 2003StatutMembreDernière intervention25 avril 2008 23 avril 2008 à 22:44
Bon en fait, j'ai créé un nouvelle fonction dans la DLL qui permet de détruire les objets que je crer avec la DLL.
J'ai maintenant 2 fonctions dans ma DLL, une qui me crer une instance et une autre qui détruit l'instance en lui passant l'addresse de l'objet.
Ça fonctionne très bien.