Pour appeler les fonctions d'une DLL, tu as 2 méthodes :
- Soit tu lies ton programme statiquement avec le fichier .lib correspondant à la DLL, et qui contient des fonctions permettant l'appel des fonctions de la DLL
- Soit tu charges la DLL en mémoire, puis tu accèdes à ses fonctions dynamiquement via la fonction Win32 GetProcAddress().
Dans le 1er cas, tu dois inclure à ton projet le fichier .lib fourni avec la DLL. Ce fichier contient des fonctions qui appelleront les fonctions de la DLL.
Mettons que tu aies une DLL Madll.dll qui expose la fonction
Mafonction(). Normalement, tu as également un fichier Madll.lib que tu dois ajouter à ton projet, et qui contient le code qui ouvre le fichier Madll.dll et qui appelle Mafonction(). Quand tu feras un appel à Mafonction() dans ton source, tu appelleras en fait la fonction Mafonction() présente dans Madll.lib, qui se charge d'appeler Mafonction() dans Madll.dll (tu me suis toujours ? )
Ce que je sais de Dev C++, c'est qu'il utilise gcc. Or, sous gcc, Unix oblige, les fichiers .lib ont l'extension .a et n'ont pas la même structure. Ce qui implique que tu dois recompiler le source de ta DLL si tu le possèdes pour générer un fichier Madll.a
- La 2ème méthode nécessite que tu connaisses le nom et les paramètres de la fonction que tu désires appeler. Tu n'as pas besoin de .lib
Pour cela, tu dois charger la DLL en mémoire via LoadLibrary(), ce qui te fournira un handle vers cette DLL. Puis, via la fonction GetProcAddress(), tu récupères l'adresse de la fonction que tu utilises pour accéder à cette fonction. Quand tu as fini, tu libères la DLL avec FreeLibrary().
Exemple avec Madll.dll (Mafonction prend une chaine en paramètre et retourne cette chaine en sortie) :
Code :
- #include <windows.h>
- int main(int argc, char **argv)
- {
- HINSTANCE dllLib;
- LPTSTR fonctAdr;
- BOOL res;
- dllLib = LoadLibrary("Madll" ); //note que je ne met pas l'extension
-
- if (dllLib != NULL) {
- fonctAdr = (LPTSTR) GetProcAddress(dllLib, "Mafonction" ); // idem
- if (fonctAdr != NULL) {
- (fonctAdr) ("Test\n" ); // j'appelle la fonction avec la chaine "Test\n" en paramètre.
- }
- res = FreeLibrary(dllLib); // on libère la DLL
- }
- return 0;
- }
|
Voila voila, tu sais tout
Message édité par Harkonnen le 24-07-2003 à 21:33:02
---------------
J'ai un string dans l'array (Paris Hilton)