Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2509 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Pb d'éxécution de dll en runtime

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb d'éxécution de dll en runtime

n°214953
nbauten
Tu parleras quand on te l'dira
Posté le 16-09-2002 à 10:54:25  profilanswer
 

je programme sous BC++ 5.
j'ai créé des dll que je charge dynamiquement dans mon prog,
tout ce passe bien mais à la fermeture de l'application. Le programme génère une erreur de désallocation semble -t- il.
l'erreur n'apparait que si ma dll est chargée et utilisée.
builder5 m'indique qu'il s'agit d'un prob de écriture à une adresse memoire.
Le fichier de code où se trouve l'erreur est SysUtils (fichier
de builder évidemment.)
la pile d'appel est la suivante:
_terminate
_kernel32
_system
_finalization
_done exception
 
si qqun a une petite idée,ca m'intéresse vivement ca fait un bon moment que je sèche dessus et la doc n'est pas très bavarde la-dessus.
 
l'erreur vient peut-être du fait qu'au linkage de la dll : j'ai  
les avertissements suivans :
 
operator new, delete, etc... définit dans 2 modules CG32.lib et  
cw32.lib
 
je pense que cela vient des options de compilation, mais  
je ne comprend po trop les options : RTL dynamique et modules externes qui semblent jouer un rôle dans ce bordel.
 
d'avance merci et chapeau bas à ceux qui savent se dépatouiller dans ces histoires de linkages et libraires un peu chelou.

mood
Publicité
Posté le 16-09-2002 à 10:54:25  profilanswer
 

n°215430
Joel F
Real men use unique_ptr
Posté le 17-09-2002 à 09:25:12  profilanswer
 

premierement, desactive la RTL dynamiaue et les paquets d'excutions.
 
Deuziememnt kaike tyfai dans tes dll ???
Tu exportes des classes, des fonctions ? des precision stp

n°215462
nbauten
Tu parleras quand on te l'dira
Posté le 17-09-2002 à 10:46:50  profilanswer
 

j'ai déjà désactiver la RTL dynamique.
mais j'ai au linkage des warnings du type :
" symbol new defined in both module C:\...\CBUILDER5\LIB\CG32.lib
 and C:\...\CBUILDER5\CP32MT.LIB
 
quand aux paquets d'éxécution, il ne sont pas activés pour les dll. mais pour mon prog principale si je les retire, cela me provoque des erreurs de désallocation pour une dll ne contenant pas de vcl et des erreurs dès l'éxécution de la dll si elle contient de la vcl.
 
bref ;-)
j'en suis au point où :
_ mes dlls en runtime fonctionnent bien
_ il y a juste des erreurs de désallocatino (TObject:Free(...))
quand l'application se termine et
qu'elle a éxécuter des dll contenant des objets de la vcl.
_ les dlls ne contenant pas vcl.h n'ont pas de problème.
 
 
précision sur mes dll:
_elles utilisent la STL et pour certaines la vcl (celles qy plantent)
_ elles contiennent 3 méthodes exportables :  
   _ retour d'info de la dll
   _ activation  
   _ libération de la mem créé dans la dll.
 
grosso modo la dll créé une instance d'une classe qui n'est pas exportable, la méthodes d'activation éxécute simplement une méthode de cette classe et la 3eme détruit l'instance créé dans la dll.
je fait bien attention de détruire tous les objets que je créé dans ma dll.
je fait également attention à ne pas détruire des objets créés dans ma dll et utilisés dans mon prog principal.
d'ailleurs cela m'indique : "ressource de STL différente"
que ce soit des pointeurs où des références.  
en fait ne transitent entre les dlls et le prog que des pointeurs constants.
les seuls objets de la vcl utilisé sont AnsiString (personne n'est parfait ;-)
il n'y a pas d'objets visuels de type vcl dans mes dll.
 
 
j'espere être un peu plus clair, il faut dire que c'est la première fois que j'utilise des dlls.
 
il semblerait à mno humble avis que les références d'objets de type vcl AnsiString etc... créés dans ma dll sont tantées d'être supprimée à la fermeture de mon application.
je suis preneur de la moindre hyphothèse.
 
 

n°215464
Joel F
Real men use unique_ptr
Posté le 17-09-2002 à 10:51:11  profilanswer
 

Fo faire gaffe a la création de classe utilisant la ST dans les DLL.
 
Tu utilise AnsiString dans tes DLL ... Y a un warning lorsque tu crée un DLl qui te dit qui fo lié une biblio particuliere si tu les utilsie dans un dll.

n°215469
LetoII
Le dormeur doit se réveiller
Posté le 17-09-2002 à 10:53:39  profilanswer
 

Joel F a écrit a écrit :

Fo faire gaffe a la création de classe utilisant la ST dans les DLL.
 
Tu utilise AnsiString dans tes DLL ... Y a un warning lorsque tu crée un DLl qui te dit qui fo lié une biblio particuliere si tu les utilsie dans un dll.




 
 :non: Uniquement si c l'appli qui crée une instance d'unee classe exportée.


---------------
Le Tyran
n°215474
Joel F
Real men use unique_ptr
Posté le 17-09-2002 à 10:56:45  profilanswer
 

Ok, donc ca vien pa de la ...
 
Tu utilises koi comme fonction/classes de SysUtils ?
De quoi descendent tes classes , TObject, TComponent ?

n°215477
LetoII
Le dormeur doit se réveiller
Posté le 17-09-2002 à 10:58:30  profilanswer
 

T'as essayé de tracer le truc?


---------------
Le Tyran
n°215530
nbauten
Tu parleras quand on te l'dira
Posté le 17-09-2002 à 11:43:09  profilanswer
 

en fait, de la vcl, j'utilise juste ansiString et des méthodes de formatage bien utile.
 
la pile d'appel indique à la fermeture de l'api :
_terminate
_exit
_etc..
le pas-à-pas donne rien évidemment, car je tombe sur les en-tetes des fichiers de borland  
c'est vraiment à la désallocation de la mem.
 
un truc peut-être :
j'utilise LoadLibrary (MFC) pour charger ma dll mais étrangement  
FreeLibrary n'est pas indispensable, puisque je n'est pas de perte de mémoire si je ne l'utilise pas.
 
mes propres classes dans mes dll héritent seulement d'autres classes à moi qui n'utilisent pas la vcl.
 
 

n°215598
LetoII
Le dormeur doit se réveiller
Posté le 17-09-2002 à 13:20:31  profilanswer
 

nbauten a écrit a écrit :

en fait, de la vcl, j'utilise juste ansiString et des méthodes de formatage bien utile.
 
la pile d'appel indique à la fermeture de l'api :
_terminate
_exit
_etc..
le pas-à-pas donne rien évidemment, car je tombe sur les en-tetes des fichiers de borland  
c'est vraiment à la désallocation de la mem.
 
un truc peut-être :
j'utilise LoadLibrary (MFC) pour charger ma dll mais étrangement  
FreeLibrary n'est pas indispensable, puisque je n'est pas de perte de mémoire si je ne l'utilise pas.
 
mes propres classes dans mes dll héritent seulement d'autres classes à moi qui n'utilisent pas la vcl.
 
 
 




 
FreeLibrary ça rien à voir avec la mémoir, ça indique juste que ton prog n'utilise plus la DLL


---------------
Le Tyran

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Pb d'éxécution de dll en runtime

 

Sujets relatifs
creations de consoles sous unix ou sous darwin avec Runtime()[dephi] problème d'exécution de resquêtes SQL
Mail() : Maximum execution time of 30 seconds exceeded, tjs PAREIL !!!Lancer un prog puis reprendre la main après exécution de ce dernier
Comment fermer automatiquement une page apres son exécution?set_magic_quotes_runtime perturbe mon serveur apache !
[php] limitter le temp d execution d une requete sql[PHP/JS] déclenchement de l'execution d'un script php via javascripts
[C++] Exécution d'un programme dos [les bizarreries de windows]HELP !!! exécution d'un fichier batch sur 1 serveur distant
Plus de sujets relatifs à : Pb d'éxécution de dll en runtime


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR