Retrouver le handle d'une DLL chargée avec LoadLibrary [Résolu]

Signaler
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Bonjour à tous

J'ai une question toute bete.
Je charge mes DLL de cette maniere pour pouvoir tester si elles sont utilisables sans obtenir de message d'erreur, et ça marche tres bien.


Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long



HwndDll = LoadLibrary("MaDll.dll")



If HwndDll Then
-
-
-
End If

FreeLibrary (HwndDll)



Mais voila, si je ne met pas la variable HwndDll public je perd sa valeur.
J'aimerais savoir quelle est la commande qui permet de retrouver la valeur de "HwndDll" c'est à dire l'emplacement mémoire de ma library.
Ceci me permettrais de pouvoir decharger la library sans avoir à mémoriser son emplacement mémoire dans une variable.




Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long




Private Sub Form_Initialize()
 
 If  LoadLibrary("MaDll.dll") Then
  -
  -
  -
 End If

End Sub

Private Sub Form_Terminate()
 FreeLibrary ( ????)

End Sub 

Merci de votre aide
Bonne journée

8 réponses

Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Je vous remercie, mais je suis arrivé à trouver tout seul comme un grand.
Je donne la solution si quelqu'un est dans mouise comme moi un jour

Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long

Merci et bonne journée
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Bonsoir,

Puis-je te faire remarquer que ce handle est retourné par la fonction LoadLibrary ?

    Dim tonhandle AsLong  
    tonhandle = LoadLibrary("MaDll.dll")

Nul besoin de GetModuleHandle

Alors ???
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Je vois pas le problème avec ça :

Option Explicit

Declare Function LoadLibrary
Lib "kernel32.dll" Alias "LoadLibraryA" ( _
   
ByVal lpLibFileName
As String)
As Long
   

Declare Function FreeLibrary
Lib "kernel32.dll" ( _
   
ByVal hLibModule
As Long)
As Long
   

Sub Main()
 
Dim hDLL
As Long
 hDLL = LoadLibrary(
"gdi32.dll")
 
If hDLL
Then
  MsgBox
"DLL chargée : hDLL=" & hDLL, vbInformation,
"Info"
 
End If
 FreeLibrary hDLL

End Sub
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Merci à tous les deux de votre interet.

Je sais que LoadLibrary retourne le Handle.
Mais ma question etait de savoir si il y avait un moyen de l'obtenir à nouveau, si je le "perdais" ou si je ne le connaissais pas, ou si je ne voulais pas mettre ma variable en public.
Dans le cas d'une ouverture de ma DLL dans une procedure et la fermeture dans une autre.
De plus, si je connaissais un bon moyen de connaitre ce handle, je pourrais vérifier avec certitude que j'ai bien libéré ma DLL apres le FreeLibrary.
D'ailleur comment etre bien sur d'avoir libéré un handle ?????

Donc cette fonction me serait utile deux fois.
Pourriez vous me dire comment vous feriez, si vous ne mémorisiez pas pour X raison le handle à l'ouverture....et en aviez besoin ulterieurement ???
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Je ne vois simplement pas les "X raisons" éventuelles, si tu ne quitte pas tin appli !
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
La verification du dechargement correct d'une library par exemple !!!
Et de ce fait la certitude du travail effectué
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
@ [auteur/ANDREBERNARD/117726.aspx andrebernard] : Mouais, mais quand ça ne fonctionne pas, que faire ??
<title>FreeLibrary</title><link disabled="" href="../../backsdk3.css" rel="stylesheet" /><style type="text/css"><![CDATA[
@import url(../../backsdk4.css);
]]></style>[errors_3uwi.htm GetLastError].
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Donc GetModuleHandle donne bien le handle d'une DLL si elle est encore chargée en mémoire, sinon elle retourne zero.
C'est compliqué y'en a qui disent que oui et d'autre que non, c'est bien la premiere fois que je vois un sujet aussi peu clair.
Merci de votre aide