begin process at 2012 05 29 06:50:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Impossible d'obtenir l'adresse d'une function contenus dans une DLL


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Impossible d'obtenir l'adresse d'une function contenus dans une DLL

lundi 24 mai 2010 à 13:02:56 | Impossible d'obtenir l'adresse d'une function contenus dans une DLL

Nementon

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 :

Code DLL :
Code C/C++ :
#include <stdio.h>
#include <windows.h>

BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpvReserved)
{
	switch(dwReasonForCall)
	{
		case DLL_PROCESS_ATTACH:
			MessageBox(NULL, L"Youuupi", L"Noname", MB_OK);
		break;
		case DLL_PROCESS_DETACH:
			MessageBox(NULL, L"Ahahahah .... tchuus !", L"Noname", MB_OK);
		break;
       }
	return true;
}
__declspec(dllexport) int AaAaA(void)
{
	return MessageBox(NULL, L"Héhé, ca fonctionne !", L"Noname", MB_OK);
}


Code de l'exécutable :

Code C/C++ :
#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 :

Code C/C++ :
#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.
lundi 24 mai 2010 à 22:43:19 | Re : Impossible d'obtenir l'adresse d'une function contenus dans une DLL

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
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:
Code C/C++ :
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.
mardi 25 mai 2010 à 13:39:17 | Re : Impossible d'obtenir l'adresse d'une function contenus dans une DLL

Nementon

En effet, merci


Cette discussion est classée dans : code, dll, include, ftest, hdll


Répondre à ce message

Sujets en rapport avec ce message

exemple de creation et utilisation d'un simple dll . [ par bonapart002 ] Bonjour:je suis débutant en c++ .je travail  avec Borland C++ 5.01.je veux créer une dll puis l'utiliser dans un programme .pour cela j'ai crée  un pr Utilisation DLL dynamique / getprocAddress null [ par Inutqen ] Bonjour à tous ! J'essaye d'utiliser une DLL fournie sans .lib, mais avec un beau .h, du coup je tente la combo LoadLibrary et GetProcAddress. Le pro erreur code [ par ucf662 ] [code=cpp]class point{ int x,y; public: void initialiser( int x1 , int y1 ) ; void deplacer( i code qui donne le temps d'exécution sous linux [ par elhajjajireda ] Bonjour, si le vous plait est ce que vous pouvez m'aider un peu pour comprendre ce code qui permet d'obtenir le temps d'exécution sous linux [code=cp compiler c/c++ main en dll [ par bmoumen27 ] Comment compiler le code suivant en dll avec gcc [code=cpp]int main(int argc, char** argv){ //the main code here }[/code] Comment c/c++ appels .Ex Compilation DLL [ par anjopa ] Bonjour, J'ai un soucis avec un bout de code qui fonctionne dans visual studio 6 mais pas dans visual studio 2010... Voici le code : MATRIXDLL_API Mode release [ par galax98 ] Bonjour Je travaille sous Visual c++ 2008 Express et j'ai 2 petites questions J'ai fait une application qui utilise une dll. Ayant besoin de faire q Dll, resource .h et .rc [ par wxccxw ] Bonjour, Je souhaite utiliser une dll pour creer un dialog box. j'ai creer une dll deja dans laquelle j'ai deja [code=cpp]extern "C" __declspec(dllex Programme en c++ [ par noussa44 ] Bonjour à tous, Je suis débutant en c++ et j'ai un problème dans un exercice qui demande de lire à partir d'un fichier texte des réels et les stockés Explorer le code d'une DLL [ par JSilvere ] Salut, J'essaie depuis plus d'un mois d'utiliser une DLL pour un de mes programmes, mais ceux en vain, je tâtonne et avance au rythme d'une limace.


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales