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

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

Marsh Posté le 28-06-2003 à 14:36:26    

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*

Reply

Marsh Posté le 28-06-2003 à 14:36:26   

Reply

Marsh Posté le 28-06-2003 à 16:29:30    

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)
Reply

Marsh Posté le 28-06-2003 à 16:34:43    

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:

Reply

Marsh Posté le 29-06-2003 à 18:12:34    

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
Reply

Marsh Posté le 02-07-2003 à 14:02:56    

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

Reply

Marsh Posté le 02-07-2003 à 14:05:27    

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


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-07-2003 à 16:53:44    

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 !

Reply

Marsh Posté le 02-07-2003 à 17:26:43    

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
Reply

Marsh Posté le 02-07-2003 à 19:02:14    

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 :)

Reply

Marsh Posté le 03-07-2003 à 10:34:34    

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


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 03-07-2003 à 10:34:34   

Reply

Marsh Posté le 03-07-2003 à 14:45:45    

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 !

Reply

Marsh Posté le 03-07-2003 à 15:22:17    

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)
Reply

Marsh Posté le 03-07-2003 à 15:35:17    

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
Reply

Sujets relatifs:

Leave a Replay

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