Soft pour libérer un dll utilisée

Soft pour libérer un dll utilisée - Programmation

Marsh Posté le 21-11-2001 à 12:10:51    

En fait, g un pb avec une dll que j'écrit. Pour la tester, après une compilation, je dois lancer un éxécutable qui l'utilise. Mais il la libère pas quand je le quitte (je rentrerai pas dans les détails, ms ce fait est inévitable: g pas la main sur cet exe). Ce qui fait qu'après avoir testé une fois ma dll (et lancer cet exe qui l'utilise et ne la libère pas), je n'peux plus compiler (normal, la dll que je veux créer est utilisée) et je suis obligé de redémarer mon poste.
Je cherche donc un utilitaire qui me permettrai de trouver quel process utilise cette dll, et de la tuer. Bref, un truc qui permette de libérer la dll.
qqn à une idée !?

Reply

Marsh Posté le 21-11-2001 à 12:10:51   

Reply

Marsh Posté le 21-11-2001 à 12:13:45    

renome la...
c'est pas genial, mais comme ca tu pourras compiler...

Reply

Marsh Posté le 21-11-2001 à 12:17:20    

J'pourrais compiler, mais pas tester...
ou si tu veux dire que je devrais renomer la dll que je veux libérer, évidement, c pas possible...elle est utilisée, et on renomme pas un fichier utilisé ! :cry:

Reply

Marsh Posté le 21-11-2001 à 12:19:38    

El_Gringo a écrit a écrit :

J'pourrais compiler, mais pas tester...
ou si tu veux dire que je devrais renomer la dll que je veux libérer, évidement, c pas possible...elle est utilisée, et on renomme pas un fichier utilisé ! :cry:  




Ben si, je vois pas le Pb...
essaye...

Reply

Marsh Posté le 21-11-2001 à 12:22:34    

tu peux essayer avec prcview : http://www.google.com/search?sourc [...] &q=prcview
 
c'est un freeware qui liste les process, les dlls utilisées, etc ... il permet de killer les process, par contre pour tes problèmes de dll je ne sais pas si ça va marcher.
 
enfin essaye voir, c'est toujours sympa comme utilitaire (dans le genre, y'a aussi filemon et regmon pour mater les accès disque/registry).

Reply

Marsh Posté le 21-11-2001 à 12:24:48    

Ben non... moi j'le vois le problème, même sous mes yeux:
"impossible de renomer LdsWeb, le fichier spécifié est utilisé par windows"...
hé oui... mais c plutot logique qd même !

Reply

Marsh Posté le 21-11-2001 à 12:28:03    

El_Gringo a écrit a écrit :

Ben non... moi j'le vois le problème, même sous mes yeux:
"impossible de renomer LdsWeb, le fichier spécifié est utilisé par windows"...
hé oui... mais c plutot logique qd même !  




C'est pas ma faute, je le fait presque tous les jours...
mv toto.sl totoXX.sl :D et ca marche alors que un rm marche pas
desolee...
 
Et je parles meme pas de Solaris ou quand tu compiles un prog pendant qu'il tourne, la version qui tourne est celle que tu viens de compiler...

Reply

Marsh Posté le 21-11-2001 à 12:29:23    

youdontcare a écrit a écrit :

tu peux essayer avec prcview : http://www.google.com/search?sourc [...] &q=prcview
 
c'est un freeware qui liste les process, les dlls utilisées, etc ... il permet de killer les process, par contre pour tes problèmes de dll je ne sais pas si ça va marcher.
 
enfin essaye voir, c'est toujours sympa comme utilitaire (dans le genre, y'a aussi filemon et regmon pour mater les accès disque/registry).  




 
je sais pas si ça va m'aider; d'abbord: Manger !:D
Mais en tt cas, c ce que je cherchais, merci...

Reply

Marsh Posté le 21-11-2001 à 12:35:16    

El_Gringo a écrit a écrit :

En fait, g un pb avec une dll que j'écrit. Pour la tester, après une compilation, je dois lancer un éxécutable qui l'utilise. Mais il la libère pas quand je le quitte (je rentrerai pas dans les détails, ms ce fait est inévitable: g pas la main sur cet exe).  




C'est windows qui gere le chargement et le déchargement des dll.
Même si le programme utilise LoadLibrary pour charger la dll, Windows la déchargera des que le programme se termine et ceci de manière transparente.
Je pense qu'il y a un autre problème: programme qui ne se termine pas, dll utilisée par un autre programme...

Reply

Marsh Posté le 21-11-2001 à 14:14:46    

seblamb a écrit a écrit :

 
C'est windows qui gere le chargement et le déchargement des dll.
Même si le programme utilise LoadLibrary pour charger la dll, Windows la déchargera des que le programme se termine et ceci de manière transparente.
Je pense qu'il y a un autre problème: programme qui ne se termine pas, dll utilisée par un autre programme...  




 
ha... ça sert à quoi que je précise que je vais pas m'étaler sur le sujet !? Le fait est que je veux pouvoir décharger cette Dll.

Reply

Marsh Posté le 21-11-2001 à 14:14:46   

Reply

Marsh Posté le 21-11-2001 à 14:16:57    

si tu trouve ca m'interesse aussi, si je pouvais parfois m'eviter de quiter / relancer 3ds4 ce serait pas un mal....

Reply

Marsh Posté le 21-11-2001 à 14:18:41    

Dans la serie contre-methodes....
et si tu changeais le repertoire ou tu builds la Dll ?
je sais que tu ne peu pas forcement, et que tu ne pourra peut-etre pas executer derriere, mais c'est une idee...

Reply

Marsh Posté le 21-11-2001 à 14:25:32    

Bah, c sur, si je fais ça, du coup, je pourrais compiler... Mais ça fait que déplacer le problème, parce qu'au moment du test, la dll qui sera utilisée elle celle qui n'est pas libérée par windows, bref, celle que je peux pas modifier. non, de toute façon, y a rien d'autre à faire que de trouver ce soft qui décharge les dll's de la mémoire... ou de redémarer le pc à chaque test ! pffff.... :(

Reply

Marsh Posté le 21-11-2001 à 14:46:36    

Je crois pas que ce soit possible de décharger une dll de la mémoire car elle fait partie de la même zone mémoire que le programme lui-même.
 
C'est pour cela que je pense qu'en fait ton programme n'est pas déchargé de la memmoire. Donc il suffit de tuer vraiemment ce programme ou les process qu'il a engendré.

Reply

Marsh Posté le 21-11-2001 à 15:34:00    

ouais, je sais qu'en le tuant ça libère ma dll, ms si y avais moyen de le forcer, avec un programme externe, à décharger la dll, j'aurai préféré (parce que je sais qu'il n'utilise aucune de ses fonction,  donc le programme devrai tenir le coup, même si je le force à décharger cette dll)

Reply

Marsh Posté le 22-11-2001 à 02:44:30    

Ca peut se faire, j'ai lu il y a longtemps de la doc a ce sujet, mais ca se fait en programmant a assez bas niveau dans windows.
Si je retrouve les articles en question (MSJ? WDJ? DRDobbs?) je te dirai ou.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-11-2001 à 08:53:09    

ha, ouais, je veux bien... ms juste par curiosité ! Parce qu'a la base, g besoin d'un soft qui fait ça pour éviter de me compliquer la vie. Si je dois moi même programmer ce soft, je crois que je vais me la compliquer plus qu'autre chose !:D
Mais ça m'interresse qd même...

Reply

Marsh Posté le 22-11-2001 à 09:56:14    

Si c'est en 16 bits, il y a(vait) un vieux shareware TaskKiller qui permet de tuer les tâches qui tournent en rond, les DLLs bloquées. Je peux le retrouver aisément.
 :)  
En 32 bits, je suis démuni. :(

Reply

Marsh Posté le 22-11-2001 à 14:23:26    

:bounce:  
 
si kelkun a une soluce ...

Reply

Marsh Posté le 22-11-2001 à 18:50:01    

Si tu codes le programme appelant la dll, tu pourrais essayer le code suivant:

Code :
  1. HMODULE hdll;
  2. hdll = LoadLibrary("le pathname du fichier de ta dll" );
  3. ..........
  4. ..........
  5. if (hdll)
  6.     {
  7.       int i;
  8.       /* je met 10 au pif, a toi d' ajuster selon ton cas */
  9.       for (i=0; i<10; i++)
  10.            FreeLibrary(hdll);
  11.     }


Note que a priori si tu as loade la dll depuis ton programme, tu as pas besoin de l' appel a LoadLibrary, puisque tu as deja loade la dll.
Ce code marche uniquement si tu l' integre au programme qui loade ta librairie (les dll ne sont plus partagees par les programmes depuis win32).
 
Tu peux te coder deux boutons dans un menu, un pour unloader la dll, et un pour la reloader [avec le LoadLibrary] (et tu copies ta nouvelle dll a la place de l' ancienne entre deux).
A+,

 

[edtdd]--Message édité par gilou--[/edtdd]


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed