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

  FORUM HardWare.fr
  Programmation
  C++

  3 question ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

3 question ?

n°190340
blackgodde​ss
vive le troll !
Posté le 05-08-2002 à 23:42:20  profilanswer
 

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 )-
mood
Publicité
Posté le 05-08-2002 à 23:42:20  profilanswer
 

n°190463
Musaran
Cerveaulté
Posté le 06-08-2002 à 05:25:57  profilanswer
 

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
rapport entre les 2, ou quoi que ce soit ?

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.


Message édité par Musaran le 06-08-2002 à 05:30:16

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°190775
blackgodde​ss
vive le troll !
Posté le 06-08-2002 à 15:44:43  profilanswer
 

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 ...


---------------
-( BlackGoddess )-
n°190936
BENB
100% Lux.
Posté le 06-08-2002 à 17:36:47  profilanswer
 

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.

n°190963
blackgodde​ss
vive le troll !
Posté le 06-08-2002 à 18:54:46  profilanswer
 

d'accord, merci beaucoup


---------------
-( BlackGoddess )-
n°191245
Musaran
Cerveaulté
Posté le 07-08-2002 à 03:24:25  profilanswer
 

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.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  3 question ?

 

Sujets relatifs
JS questionProgrammation et base de données... Juste une question
Question[HTML] cellpadding ok, nouvelle question : lier les class ?
[CSS] Question a 1000 balles. prob trop chelounouvelle question
[java-servlet] question sur la conccurence[PHP] je ne capte pas !! [RESOLU] MERCI Mais ya encore une question !
Juste une question comme ca?[PHP] Peut être une question con ;) mettre les liens en variable ???
Plus de sujets relatifs à : 3 question ?


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