cs_Nementon
Messages postés21Date d'inscriptiondimanche 27 janvier 2008StatutMembreDernière intervention25 mai 2010
-
24 mai 2010 à 13:02
cs_Nementon
Messages postés21Date d'inscriptiondimanche 27 janvier 2008StatutMembreDernière intervention25 mai 2010
-
25 mai 2010 à 13:39
Bonjours,
Voila le code simple d'une DLL et de son exécutable, compilé sous Visual 2008 et qui pour de sombres raisons plante lamentablement, lorsque l'exécutable tente de récupérer l'adresse de la function AaAaA de la DLL :
#include <stdio.h>
#include <windows.h>
typedef int (*Ftest)(void);
int main()
{
HMODULE hDLL = LoadLibrary(L"hookDll.dll");
if (hDLL == NULL) {
fprintf(stderr, "La dll n'as pas put etre trouvé.\n");
}
else
{
Ftest pFTestDll = (Ftest)GetProcAddress(hDLL, "AaAaA");
if (pFTestDll == NULL) { // La ca plante ô.o
printf("Et bin .... ca plante la, et je suis bien dégouté :D");
}
else {
pFTestDll();
}
}
FreeLibrary(hDLL);
return 42;
}
Toute idées de génies, ou idées toutes courtes même sont les bien venus, je suis plus que dérouté devant le comportement du programme, étant donnée sa simplicité, et le faite que j'ai suivis plusieur tutoriel quasiment à la lettre.
A noté que le code suivant me retourne la même erreur :
#include <stdio.h>
#include <windows.h>
typedef int Ftest(void);
int main()
{
HMODULE hDLL = LoadLibrary(L"hookDll.dll");
if (hDLL == NULL) {
fprintf(stderr, "La dll n'as pas put etre trouvé.\n");
}
else
{
Ftest * pFTestDll = (Ftest *)GetProcAddress(hDLL, "AaAaA");
if (pFTestDll == NULL) { // La ca plante ô.o
printf("Et bin .... ca plante la, et je suis bien dégouté :D");
}
else {
pFTestDll();
}
}
FreeLibrary(hDLL);
return 42;
}
Erreur qui obtenue à l'aide de LastGetError(), a une drôle de tête, "7F".
Cordialement.
A voir également:
Impossible d'obtenir l'adresse d'une function contenus dans une DLL
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 24 mai 2010 à 22:43
Salut,
Ton problème vient du fait que le nom de la fonction exportée est décoré. En C++, pour éviter que les noms de fonctions soient décorées on utilise extern "C" devant __declspec(dllexport) comme ceci:
extern "C" __declspec(dllexport) int AaAaA(void)
{
return MessageBox(NULL, L"Héhé, ca fonctionne !", L"Noname", MB_OK);
}
On peut aussi utiliser un fichier .def.
Ca devrait marcher maintenant.