Utilisation de DLL

Messages postés
63
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007
-
Messages postés
63
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007
-
Bonjour,

J'utilise une DLL dans un programme en VB6. Celle ci se situe sous la racine de ce programme. Ce programme fonctionne bien. Nota: si je déplace la dll dans system32, il ne fonctionne plus.
Lorsque je copie le code, dans un autre programme et que je déplace la DLL, le programme ne trouve pas cette DLL.
Question: Cette DLL n'est pas enregistrée avec regedit  (pas possible: message d'erreur indiquant que le fichier n'est pas un script de registre)
Elle n'est pas non plus référencé dans les 2 programmes avec Projet\Reférence.
Elle est où l'astuce ?

Merci d'avance.

12 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
L'instruction Declare de tes fonctions peut-être ?

Si tu ne spécifie pas de chemin pour le nom de la dll, la recherche s'effectue dans un ordre bien particulier. Dès qu'un fichier portant le nom de la dll est trouvé, la recherche s'arrete et ce fichier est utilisé (bon ou pas).

L'ordre de recherche est le suivant :
<ol><li>Dossier contenant le fichier.exe

</li><li>Dossier courant

</li><li>Dossier système de Windows (souvent mais pas nécessairement
\Windows\System)

</li><li>Dossier de Windows (pas nécessairement \Windows)

</li><li>Variable d'environnement Path </li></ol>Donc si ta dll est trouvé au point 1 ou 2, celle dans system32 n'est pas utilisée.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
63
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007

Merci pour les infos, mais cela n'a pas l'air aussi simple. Le programme copié se trouve sur disque dur externe.

Sur un PC je copie la DLL dans system32 ou  dans le même répertoire que l'exe il ne trouve pas la DLL.

Ce même disque dur externe sur un autre PC, la DLL est dans system32 il
fonctionne. Je déplace cette DLL dans le même répertoire que l'exe il
ne fonctionne plus :(

Je ne comprends plus, il y a des données qui sont sauvegardés ...?


Dans le code de déclaration comment fait on pour forcé un chemin relatif par exemple.

j'ai ce code là actuellement:

Public Declare Sub MediaInfo_Close Lib "MediaInfo.dll" (ByVal Handle As Long)
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Avec ce code là, ta dll va etre cherchée selon l'ordre que j'ai donné tout à l'heure. Attention à bien supprimer la DLL sous le répertoire de l'exe lorsque tu la met dans system32, sinon c'est toujours celle de l'exe qu'ilm va cherché.

pour lui indiqué un chemin absolu il faut mettre ... Lib "X:\chemin\souschemin\...\MediaInfo.dll"

Pour le répertoire système c'est normalement (ça dépend des systèmes) "C:\windows\system32\MediaInfo.dll"

Je sais pas si la variable d'environement marche avec Declare, si oui ça donnerais "%SYSTEM%\MediaInfo.dll"

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
63
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007

Désolé,

Public Declare Sub MediaInfo_Close Lib "I:\MediaInfo.dll" (ByVal Handle
As Long) :Erreur 48,  Fichier introuvable alors quelle se trouve
là.  J'ai fait particulièrement attention au Majuscule comme il
est préconisé dans le fichier d'aide.


Commet ce fait-il qu'avec le même code:

Public Declare Sub MediaInfo_Close Lib "MediaInfo.dll" (ByVal Handle As Long).

Les 2 programmes qui se trouvent sur le même disque dur externe, et
donc tourne sur le même PC qui n'a pas cette DLL ailleur. Le premier
marche si la DLL est sur le répertoire du programme VB et l'autre non??
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Essaye (mais ca m'étonnerai que ca marche !!!) un RegSvr de ta dll sur le poste où ca ne marche pas :
Dans la commande éxécuter de windows :
RegSvr32 lechemindetadll
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
J'avais oublier de préciser aussi.
Il m'est arrivé que VB merdouille avec les chemins des DLL en mode déboguage.
Alors que les dlls étaient au bon endroit, au bout d'un certain temps il ne les trouvaient plus.
Alors que l'executable, lui fonctionnait sans problème.
Je n'ai jamais compris ce qui s'était passé.
Je pense qu'une merdouille s'était passée, et que le fichier projet s'était corrompu. Je n'ai pas eu le temps de chercher plus car j'ai livré l'appli très rapidement.

Si c'est ça ton problème, je n'ai pas la solution.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Mettre DLL dans dossier de exe.
Mettre un appel SetCurrentDirectory() sur App.Path en toute 1ere instruction dans main().
Devrait aller.

ciao...
BruNews, MVP VC++
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
En effet, en mode debug, de temps en temps vb a un peu de mal avec les répertoires, c'est vrai !
Messages postés
63
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007

Je suis désolé d'être un boulet, peux tu préciser un peu plus la
syntaxe de: "Mettre un appel SetCurrentDirectory() sur App.Path en
toute 1ere instruction dans main()."


Dans le form_load()

je mets un code ??
Messages postés
63
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007

J'ai écrit ça:
Private Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" ( ByVal lpPathName As String) As Long

Public Sub Form_Load()
Dim Retour As Long
    Retour = SetCurrentDirectory(App.Path)
End Sub

Mon problème est tjs là
Messages postés
63
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007

Je viens de trouver par hazard mon problème.
J'avais 2 DLL différentes entre les 2 programmes. Le même nom mais celle qui ne fonctionnait pas avait 16Ko de plus. Alors que je l'avais simplement copié... Sans doute un fichier vérollé.
Argh j'ai quand même passé 4H sur ce Put.. de truc.

Merci encore pour votre écoute et votre aide.
Messages postés
63
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007

Euh, finalement je suis intéressé par le code pour initialiser le répertoire courant, car maintenant le mode debug de temps en temps ne trouve plus la DLL, et du coup je suis obligé de fermer le programme pour le réouvrir et là tout marche.

Merci d'avance.