Problème de lib et de dll...

Signaler
Messages postés
15
Date d'inscription
vendredi 1 mars 2002
Statut
Membre
Dernière intervention
3 novembre 2003
-
Messages postés
113
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
5 janvier 2004
-
je programme sous vc++6 et j'aimerais savoir s'il est possible de faire appel à une dll externe à un programme principal sans avoir à recompiler le programme à chaque fois. comme Winamp qui fait appel à n'importe quelle dll de plugin sans ce soucier de quoi que ce soit.

6 réponses

Messages postés
260
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
27 août 2008
1
Tu peut faire un appel de DLL dynamique
Hart
Messages postés
15
Date d'inscription
vendredi 1 mars 2002
Statut
Membre
Dernière intervention
3 novembre 2003

c'est à dire
Messages postés
260
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
27 août 2008
1
C'est a dire :

HINSTANCE hInst = LoadLibrary("Nom.ocx"); //creation d'une instance vers l'ocx

if(hInst == NULL) //Verification que l'ocx est bien instancié
{
Memo1->Lines->Add("Failed Load DLL");
return;
}

HWND (*NomFonction)(Arg1,Arg2,Arg3,etc...); //Créeation de ton handle de ta fonction que tu veut aller chercher dans ta dll

NomFonction = (HWND(*)(Arg1,Arg2,Arg3,ettc...))GetProcAddress(hInst,"HtmlHelpA"); //Recuperation de l'adresse de la fonction

if(NomFonction == NULL) //encore une verif si la fonction existe
{
Memo1->Lines->Add("Failed Locate Function");
return;
}

NomFonction (tes arguments); // Et enfin tu appel ta petite fonction comme si de rien était, c'est cool non !!

Voila, a+ Hart
Messages postés
15
Date d'inscription
vendredi 1 mars 2002
Statut
Membre
Dernière intervention
3 novembre 2003

ok merci, et il y a des pertes de performances à utiliser ce type de procédure par rapport à l'utilisation des lib?
Messages postés
260
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
27 août 2008
1
Je n'ai pas remarqué de différence de perf en utilisant cette methode. Il te faut tester les 2 si tu veut etre sur qu'une methode tourne + vite qu'une autre, ou peut que qqu'un d'autre sera répondre. Sinon si tu veut tester les perf, tu fait un gettickcount et tu calcul le temps d'exec.
Hart
Messages postés
113
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
5 janvier 2004

Il y a une différence de perf entre les 2:
pour la comprendre on peut expliquer ce qu'est une dll.
En gros:
c'est un librairie de fcts, de classes ou de variables comme un .lib
La différence c'est qu'elle n'est pas linkée avec le .exe
Ca veut dire que la compilation est plus rapide mais l'exécution moins puisqu'il y a un peu de link à lorsque le programme demande son chargement en mémoire(LoadLibrairy) et en plus il faut le temps de la charger.

Par contre ton exécutable aura une taille plus petite puisqu'une partie des fcts se trouvera dans la dll.
Autre avantage: s'il y a une nouvelle version de la dll (exemple pcq amélioration d'un algo), tu ne dois pas recompiler ton exe.

Donc c'est à toi de voir: perf contre facilité.

J'espère que j'ai été clair,

P-A