cs_M51
Messages postés63Date d'inscriptiondimanche 20 novembre 2005StatutMembreDernière intervention10 août 2007
-
21 août 2006 à 17:35
cs_M51
Messages postés63Date d'inscriptiondimanche 20 novembre 2005StatutMembreDernière intervention10 août 2007
-
22 août 2006 à 11:43
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 ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 21 août 2006 à 17:45
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 #
cs_M51
Messages postés63Date d'inscriptiondimanche 20 novembre 2005StatutMembreDernière intervention10 août 2007 21 août 2006 à 18:53
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)
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 21 août 2006 à 19:07
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 #
cs_M51
Messages postés63Date d'inscriptiondimanche 20 novembre 2005StatutMembreDernière intervention10 août 2007 21 août 2006 à 19:26
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??
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013131 21 août 2006 à 19:35
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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 21 août 2006 à 19:39
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 #
cs_M51
Messages postés63Date d'inscriptiondimanche 20 novembre 2005StatutMembreDernière intervention10 août 2007 21 août 2006 à 22:25
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()."
cs_M51
Messages postés63Date d'inscriptiondimanche 20 novembre 2005StatutMembreDernière intervention10 août 2007 22 août 2006 à 10:29
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.
cs_M51
Messages postés63Date d'inscriptiondimanche 20 novembre 2005StatutMembreDernière intervention10 août 2007 22 août 2006 à 11:43
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.