3 question ? - C++ - Programmation
Marsh Posté le 06-08-2002 à 05:25:57
Warning ! Confusion detected !
HMODULE et un HINSTANCE ne sont pas des pointeurs, ce sont des handles.
Et à priori, je dirais que s'il y a deux noms distincts, c'est que c'est pas la même chose...
Citation : je me demandais si le pointeur HMODULE retourné correspondait à la "BaseAddress" de l'image de la DLL dans l'espace mémoire du processus qui l'a appellé, ou s'il y avait un |
Ce secret appartient à l'OS.
Citation : je voudrais connaitre les différences entre ces 2 manières, par exemple est-ce que lorsqu'on inclue dll.lib, cela crée un LoadLibrary implicitement (je pense que oui) et si cela crée un GetProcAddress implicitement aussi (je pense que non, je pense que l'adresse de la fonction doit directement être écrite dans dll.lib) mais je voudrais en être sûr. |
Je pense pareil... mais je sais pas.
Il y a une différence s'il y a un problème avec la DLL:
La solution LoadLibrary+GetProcAddress permet de tester et d'adapter.
La solution linkage statique avorte l'exécution.
Marsh Posté le 06-08-2002 à 15:44:43
pour le chargement des DLL, on m'a expliqué que en fait LoadLibrary + GetProcAddress charge la library en mémoire puis exécute le code de la fonction, alors que avec le .lib, la library est directement intégrée au .exe a la compilation ...
Marsh Posté le 06-08-2002 à 17:36:47
BlackGoddess a écrit a écrit : pour le chargement des DLL, on m'a expliqué que en fait LoadLibrary + GetProcAddress charge la library en mémoire puis exécute le code de la fonction, alors que avec le .lib, la library est directement intégrée au .exe a la compilation ... |
Non...
3 cas
1- pas de dll mais un .lib
les fonctions utilisées par l'exe sont physiquement copiés de la lib statique vers exe. Toute la lib n'est pas copiée, et une fois le link executé le .lib n'est plus utile (pour l'execution)
2- dll indiquée au link
La dll est chargée au lancement de l'executable, les fonctions utiles y sont repertoriés par un numero (ordinal) fixé lors de la compil et du link.
La dll est chargée entierement (normalement) ainsi que les Dll auquelles elle fait reference. Elle est donc indispensable à l'execution, du début à la fin de l'execution.
3-Dll chargée lors de l'execution
C'est l'executable qui charge (et eventuellement decharge) la Dll. Celle-ci n'est pas necessaire au link de l'executable, mais par contre le programme la chargeant doit linker explicitement chaque fonction pour pouvoir l'utiliser (GetProcAdress) et il est independant de l'ordinal.
Marsh Posté le 06-08-2002 à 18:54:46
d'accord, merci beaucoup
Marsh Posté le 07-08-2002 à 03:24:25
La confusion vient de ce que pour se linker à une dll, il faut spécifier un petit fichier .lib l'accompagnant.
Mais c'est pas le même que les .lib d'incorporation de code.
Marsh Posté le 05-08-2002 à 23:42:20
Bonjour,
je suis un peu novice en C++ (je prog avec VC++6)
je me demandais tout d'abord si un pointeur HMODULE et un HINSTANCE c'était
la même chose ou pas ?
(j'ai vu une DllMain avec une HINSTANCE et une autre avec un HMODULE)
et ensuite, lorsqu'on charge une DLL avec LoadLibrary, je me demandais si le
pointeur HMODULE retourné correspondait à la "BaseAddress" de l'image de la
DLL dans l'espace mémoire du processus qui l'a appellé, ou s'il y avait un
rapport entre les 2, ou quoi que ce soit ?
et enfin, je prends un exemple :
je crée une DLL nommé dll.DLL, contenant une fonction : fdll
pour appeler cette DLL, on peut inclure dll.lib au linkage, et juste mettre
le prototype de fdll dans la fonction
mais on peut aussi faire ainsi :
hMod = LoadLibrary("dll.DLL" );
fdll = GetProcAddress(hMod,"fdll" );
je voudrais connaitre les différences entre ces 2 manières, par exemple
est-ce que lorsqu'on inclue dll.lib, cela crée un LoadLibrary implicitement
(je pense que oui) et si cela crée un GetProcAddress implicitement aussi (je
pense que non, je pense que l'adresse de la fonction doit directement être
écrite dans dll.lib) mais je voudrais en être sûr.
si personne ne peut me répondre, merci de m'aiguiller vers un autre forum
---------------
-( BlackGoddess )-