Lancer une dll par un exe

Messages postés
107
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
17 février 2018
- - Dernière réponse : ArthurAuguste
Messages postés
107
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
17 février 2018
- 3 mars 2011 à 00:25
Question qui doit paraître évidente pour un non débutant:
J'ai écrit une dll qui fonctionne et que je lance actuellement sans problème par :

rundll32.exe Mydll,Entrypoint

Maintenant je voudrais la lancer avec un .exe que je suis en train d'écrire.
J'ai regardé la doc de l'API32 et j'ai compris qu'il fallait faire la séquence 1 à 4 ci-dessous :

HINSTANCE hinstdll;
MYPROC dllEntryAdd;
BOOL liberation;

1.- hinstdll = LoadLibrary(TEXT("Mydll.dll"));
2.- dllEntryAdd = (MYPROC) GetProcAddress(hinstdll, "Entrypoint");
3.- ???????
4.- liberation = FreeLibrary(hinstdll);

Par contre je ne vois pas quelle instruction du langage C ou C++ il faut mettre en 3 pour lancer l'exécution à l'adresse dllEntryAdd ? (Désolé si ça vous paraît trivial)

Merci pour votre réponse
Afficher la suite 

2 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
salut,


Ta DLL (Dynamically Loadable & Linkable) n'est pas un executable. Une Dll contient des fonctions ou données qu'elle exporte pour les partager à plusieurs executables. Elle permet de partager le code qui n'a plus a être dupliqué fréquement dans les executables.

Ton executable importe les fonctions par leur nom ou leur numero. GetProcAddress retournera l'adresse mémoire ou commence la fonction.

Pour l'appeler en C, il faut créer un type pointeur vers une fonction:

void (*pfct)(params,...);
pfct = GetProcAddress();
pfct(params,...);

Cours sur les pointeurs C/C++.

@++
Commenter la réponse de cs_patatalo
Messages postés
107
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
17 février 2018
0
Merci
Ok merci, mais entre-temps j'ai fait ceci ci-dessous et ça marche:

HINSTANCE hinstdll;
FARPROC dllEntryAdd;
BOOL liberation;

1.- hinstdll = LoadLibrary("Mydll.dll");
2.- dllEntryAdd = GetProcAddress(hinstdll, "Entrypoint");
3.- dllEntryAdd(); // exécution de la dll
4.- liberation = FreeLibrary(hinstdll);

Je crois qu'on fait en fait la même chose, sous l'API32 de windows FARPROC est un pointeur vers une fonction.
Je n'avais rien indiqué sur ma dll, mais ce que j'avais appelé Entrypoint ça n'était pas le point d'entrée de la Maindll, mais bien le point d'entrée d'une fonction dans la Maindll.
J'avais d'ailleurs signalé que ma dll fonctionnait déjà par l'appel suivant:
rundll32.exe Mydll,Entrypoint ce qui sous-entend bien que Entrypoint est le point d'entrée d'une fonction.

Merci
Commenter la réponse de ArthurAuguste