Problème de DLL

aztcaLISS Messages postés 91 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 avril 2008 - 22 avril 2008 à 20:34
aztcaLISS Messages postés 91 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 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.

merci

azt

6 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 avril 2008 à 21:01
Je ne sais pas répondre à ta question, mais si c'est ta DLL qui fait le new, c'est également elle qui devrait faire le delete

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
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.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
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

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
aztcaLISS Messages postés 91 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 avril 2008
22 avril 2008 à 22:37
J'ai cherché un peu, et j'ai tombé sur un tutorial qui fait la même procédure que moi:
http://dn.codegear.com/article/20165

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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
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...)
0
aztcaLISS Messages postés 91 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 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.

azt
0
Rejoignez-nous