OVH Cloud OVH Cloud

Question bete sur les modules

6 réponses
Avatar
Aurélien REGAT-BARREL
Salut,
En lisant la doc de LoadLibrary et GetModuleHandle, on trouve :
"Pointer to a null-terminated string that contains the name of the module
(either a .dll or .exe file)."
Je me demande en fait dans quel cas il peut s'agir d'un exe.
Je n'en vois que 2 :
- l'exe lui-même qui appelle GetModuleHandle
- un drôle d'exe qui exporte des fonctions, un genre de dll renommé en exe,
ou un truc bâtard comme ntoskrl.exe
Y'a-t-il d'autres cas, et quel en est l'utilité (le 2° cas aussi) ?

--
Aurélien REGAT-BARREL

6 réponses

Avatar
Cyrille Szymanski
On 2004-04-29, Aurélien REGAT-BARREL wrote:
Salut,
En lisant la doc de LoadLibrary et GetModuleHandle, on trouve :
"Pointer to a null-terminated string that contains the name of the module
(either a .dll or .exe file)."
Je me demande en fait dans quel cas il peut s'agir d'un exe.



Il n'est pas toujours possible de rendre le HANDLE de l'EXE accessible
à toutes les portions du code d'où l'utilité d'appeler
GetModuleHandle(). Si tu crées une application console tu ne peux pas
l'obtenir autrement.

Et un EXE peut tout aussi bien exporter des choses ou contenir des
resources (des icônes par exemple, cf. explorer.exe).

--
cns
Avatar
Aurélien REGAT-BARREL
> Il n'est pas toujours possible de rendre le HANDLE de l'EXE accessible
à toutes les portions du code d'où l'utilité d'appeler
GetModuleHandle(). Si tu crées une application console tu ne peux pas
l'obtenir autrement.



GetModuleHandle( NULL ); suffit non ?

Et un EXE peut tout aussi bien exporter des choses ou contenir des
resources (des icônes par exemple, cf. explorer.exe).



Ha voilà. J'avais pas pensé à ça. On peut faire un LoadLibrary sur un exe
pour lui piquer ses ressources.
Merci.

--
Aurélien REGAT-BARREL
Avatar
Arnaud Debaene
Aurélien REGAT-BARREL wrote:
Il n'est pas toujours possible de rendre le HANDLE de l'EXE
accessible à toutes les portions du code d'où l'utilité d'appeler
GetModuleHandle(). Si tu crées une application console tu ne peux
pas l'obtenir autrement.



GetModuleHandle( NULL ); suffit non ?

Et un EXE peut tout aussi bien exporter des choses ou contenir des
resources (des icônes par exemple, cf. explorer.exe).



Ha voilà. J'avais pas pensé à ça. On peut faire un LoadLibrary sur un
exe pour lui piquer ses ressources.



Qui plus est, il est possible en bidouillant d'exporter des fonctions depuis
un .EXE. Je ne sais pas exactement *comment* c'est fait (toutes les docs de
Microsoft semblent indiquer le contraire, parce qu'il n'y a pas de
relocation au moment du chargement d'un exe), mais j'ai déjà vu des applis
le faire (les vieilles versions de Matlab notamment).

Arnaud
Avatar
Aurélien REGAT-BARREL
> Qui plus est, il est possible en bidouillant d'exporter des fonctions


depuis
un .EXE. Je ne sais pas exactement *comment* c'est fait (toutes les docs


de
Microsoft semblent indiquer le contraire, parce qu'il n'y a pas de
relocation au moment du chargement d'un exe), mais j'ai déjà vu des applis
le faire (les vieilles versions de Matlab notamment).



En effet, je viens de jeter un oeil à Mathlab 6.5, et c'est le cas.
Comment c'est fait ?
Je viens de tester :

#include <windows.h>

__declspec( dllexport ) int toto;

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
return 0;
}

J'obtiens un exe, un .exp et un .lib.
toto est bien exporté...
Tant qu'on y est, il sert à quoi ce .exp ? C'est quoi la différence par
rapport au .lib ?

--
Aurélien REGAT-BARREL
Avatar
Cyrille Szymanski
On 2004-04-30, Aurélien REGAT-BARREL wrote:
__declspec( dllexport ) int toto;



D'accord, mais le problème des "relocations" c'est surtout pour les
exportations de fonctions.

--
cns
Avatar
Aurélien REGAT-BARREL
> D'accord, mais le problème des "relocations" c'est surtout pour les
exportations de fonctions.



Ah oui, j'avais pas tilté.
Je me disais, c'est trop facile...

--
Aurélien REGAT-BARREL