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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA/VB] Utilisation d'une dll - Localisation de la dll

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA/VB] Utilisation d'une dll - Localisation de la dll

n°442564
Yoyo@
Posté le 28-06-2003 à 14:36:26  profilanswer
 

Salut,
 
Voila, en VBA/VB, la déclaration d'une dll se fait comme suit :
 

Code :
  1. Private Declare Function GetInt Lib "C:\essai.dll" Alias "returnInt" (ByVal a As Integer) As Integer


 
Voilà, je me demandais (mais j'ai essayé sans succès) s'il était possible de spécifier le répertoire ou se trouve la Dll à la volée, ou meme en mettant le tout dans une constante, ou alors l'emplcement de la Dll doit il etre connu à la création ducode VB?
 
J'aurais imaginé qqchose come ca :
 

Code :
  1. Private Declare Function GetInt Lib Path & "essai.dll" Alias "returnInt" (ByVal a As Integer) As Integer


 
Mais ca ne semble pas marcher !
 
Je vais créer une dll toute simple avec Visual C++ ! Je me demandais sil était ensuite possible de registrer ma dll sous windows, quelque soit son emplacement? (genre, on le fait une fois pour toutes, et ensuite, on l'utilise comme bon nous semble, un peu comme les librairies présente dans Access.
 
Enfin, deniere  question... Est ce que l'appel à des "modules" C++ doit se faire nécessairement au travers de librairies? Ou existe t il un moyen d'intégrer la libraire au sein meme du programme VB/VBA? (Access?)
 
Merci,
 
Yoyo*

mood
Publicité
Posté le 28-06-2003 à 14:36:26  profilanswer
 

n°442622
drasche
Posté le 28-06-2003 à 16:29:30  profilanswer
 

une DLL ne peut s'enregistrer que si elle répond aux normes COM/ActiveX.  S'il s'agit de ce qu'on appelle communément une vraie DLL avec du vrai stdcall dans les déclarations de fonctions, 3 répertoires de stockage sont possibles:
 

  • le répertoire de Windows
  • le répertoire de Windows\system (ou le répertoire de Windows\system32)
  • le répertoire de l'application.


Windows cherchera la DLL dans cet ordre si aucun répertoire n'est spécifié dans ta clause Lib.  Et malheureusement, non, tu ne peux pas placer une constante ou variable dans le chemin d'accès à ta DLL.
 
L'autre méthode consiste à la charger explicitement dans le code et créer des liens logiques entre des identifiants VB et les fonctions de la DLL, je ne suis même pas sûr que ce soit possible en VB :/


Message édité par drasche le 28-06-2003 à 16:30:59

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°442623
Yoyo@
Posté le 28-06-2003 à 16:34:43  profilanswer
 

D'accord, merci l'ami !
 
J'aurais bien aimé pouvoir registrer ma dll avec Windows, mais ca n'a pas l'air d'etre possible ! Par contre, je trouve étrange qu'il ne soit pas possible de donner en temps réel à l'appli le répertoire ou trouver la Dll, mais bon, ce qui comptais avant tout pour moi, c'était de savoir si c'était possible ou pas !
 
Sinon, si tu te sens "calé" en dll, j'ai posé un autre message ici :
 
http://forum.hardware.fr/forum2.ph [...] subcat=386
 
 :hello:

n°443161
HelloWorld
Salut tout le monde!
Posté le 29-06-2003 à 18:12:34  profilanswer
 

Ben tu créés une entrée à toi dans la base de registre qui donne le chemin de la dll ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°446299
Yoyo@
Posté le 02-07-2003 à 14:02:56  profilanswer
 

Tu peux m'expliquer comment faire ou créer cette clef? Quelque chose à déclarer ensuite dans VBA/Access?

n°446306
HelloWorld
Salut tout le monde!
Posté le 02-07-2003 à 14:05:27  profilanswer
 

Ben soit via les API (RegCreateKey, RegSetValue, ...)
soit avec un fichier .reg


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°446525
Yoyo@
Posté le 02-07-2003 à 16:53:44  profilanswer
 

Nan, mais ca hje sais faire!
 
Mais ce que je veux dire, c'est savoir quelle clef créer, ou la créer, et quelle valeur lui donner pour que ce soit pris en compte?
 
A moins que tu parles de faire une prioriiété maison, qui donnerait le path de la dll et ensuite, d'aller le chercher dans mon code, c'est ca?  
 
Si c'est ce à quoi tu penses, alors ca ne marche pas, car dans
 

Code :
  1. Private Declare Function GetInt Lib "C:\essai.dll" Alias "returnInt" (ByVal a As Integer) As Integer

 
 
le path doit etre indiqué de maniere directe, à la main, et pas avec une variable !

n°446596
HelloWorld
Salut tout le monde!
Posté le 02-07-2003 à 17:26:43  profilanswer
 

Heu non, je parle de créer ta clé genre :
HKEY_LOCAL_MACHINE\SOFTWARE\MonProg\Dll
Pour chaque dll listée à cet endroit, ton prog tente de l'ouvrir, fait le teste du checksum tout ça, et si tout est ok, il la charge.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°446784
Yoyo@
Posté le 02-07-2003 à 19:02:14  profilanswer
 

HelloWorld a écrit :

Heu non, je parle de créer ta clé genre :
HKEY_LOCAL_MACHINE\SOFTWARE\MonProg\Dll
Pour chaque dll listée à cet endroit, ton prog tente de l'ouvrir, fait le teste du checksum tout ça, et si tout est ok, il la charge.


 
 
Bah oui, mais c'est ca mon probleme, je ne sais pas comment faire pour "charger" une dll avec un chemin "custom", c'est à dire pas un chemin qui soit constant dans mon code, que j'écris à la main dans mon code :)

n°447230
HelloWorld
Salut tout le monde!
Posté le 03-07-2003 à 10:34:34  profilanswer
 

LoadLibrary, bind avec les exports avec GetProcAddress puis une fois fini FreeLibrary.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
mood
Publicité
Posté le 03-07-2003 à 10:34:34  profilanswer
 

n°447591
Yoyo@
Posté le 03-07-2003 à 14:45:45  profilanswer
 

HelloWorld a écrit :

LoadLibrary, bind avec les exports avec GetProcAddress puis une fois fini FreeLibrary.


 
Lol, pour rappelle, je travaille en VBA, et je ne pense pas que VBA possède un tel "LoadLibrary" :)
 
Là est tout le probleme d'ailleurs ! VBA permet de travailler avec les Dll, mais par contre, il ne semble pas pouvoir permettre d'indiquer dynamiquement où se trouve les dll !

n°447651
drasche
Posté le 03-07-2003 à 15:22:17  profilanswer
 

il s'agit de fonctions de l'API Win32, qui s'utilisent également via un Declare.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°447671
El_gringo
Posté le 03-07-2003 à 15:35:17  profilanswer
 

drasche a écrit :

une DLL ne peut s'enregistrer que si elle répond aux normes COM/ActiveX.  S'il s'agit de ce qu'on appelle communément une vraie DLL avec du vrai stdcall dans les déclarations de fonctions, 3 répertoires de stockage sont possibles:
 

  • le répertoire de Windows
  • le répertoire de Windows\system (ou le répertoire de Windows\system32)
  • le répertoire de l'application.


Windows cherchera la DLL dans cet ordre si aucun répertoire n'est spécifié dans ta clause Lib.  Et malheureusement, non, tu ne peux pas placer une constante ou variable dans le chemin d'accès à ta DLL.
 
L'autre méthode consiste à la charger explicitement dans le code et créer des liens logiques entre des identifiants VB et les fonctions de la DLL, je ne suis même pas sûr que ce soit possible en VB :/


Moi j'dirais que tu te trompes là.
Windows va cherche la dll donnée dans les chemins suivants (ds l'ordre):
1-chemin de l'appliquation
2-chemin courant
3-répertoire system de windows (ou system32 puis system pr NT-like)
4-répertoire windows
5-tous les chemins répertoriés dans la variable d'environnement PATH
 
Il suffit donc d'ajout la chemin de la dll à PATH (via un setup), et tu n'auras plus à la préciser.


Message édité par El_gringo le 03-07-2003 à 15:54:49
n°447682
HelloWorld
Salut tout le monde!
Posté le 03-07-2003 à 15:47:12  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA/VB] Utilisation d'une dll - Localisation de la dll

 

Sujets relatifs
[VBA] Access Lier formulaire et sous-formulaire[ VBA ] creer 1 table en affectant une liste de choix pr ses champs
Probleme d utilisation d une DLL externeUtilisation de TabStrip [Résolu]
[VBA] [Access 2000] CloseButton d'access[VBA] Algoritme de cryptage
[VBA] [ALGO] Découper une chaine de charactères d'après séparateurComment faire d'une solution VBA un programme .exe ?
Enlever les messages "etes vous sur ..." d'acces grace à VBA[VBA Excel] Problème insertion de formule
Plus de sujets relatifs à : [VBA/VB] Utilisation d'une dll - Localisation de la dll


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