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

  FORUM HardWare.fr
  Programmation
  C

  Prob avec GetProcAddress

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Prob avec GetProcAddress

n°860424
blastrock
Posté le 29-09-2004 à 20:51:01  profilanswer
 

Salut a tous,
J'ai commencé il n'y a pas longtemps a programmer en graphique sous windows et j'ai un probleme :
J'ai fait une DLL et un prog qui doit charger cette dll, je la charge avec LoadLibrary(NomDuDll) mais je n'arrive pas a utiliser une fonction, GetProcAddress me retourne toujours un pointeur NULL.
 
Quelqu'un pourrait-il m'aider ?
merci d'avance

mood
Publicité
Posté le 29-09-2004 à 20:51:01  profilanswer
 

n°860438
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-09-2004 à 21:03:39  profilanswer
 

poste ton code, ce sera plus parlant

n°860440
blastrock
Posté le 29-09-2004 à 21:07:06  profilanswer
 

Voici le code :
 

Code :
  1. typedef bool (*FUNC) (void);
  2. FUNC StartHook;
  3. int WINAPI WinMain (HINSTANCE hThisInstance,
  4.                     HINSTANCE hPrevInstance,
  5.                     LPSTR lpszArgument,
  6.                     int nFunsterStil)
  7. {
  8.     hDLL = LoadLibrary(DLLName);
  9.     StartHook = (FUNC) GetProcAddress(hDLL, "SetkbdHook" );
  10.     // Création d'une fenetre ...
  11.     ...
  12. }


Message édité par blastrock le 29-09-2004 à 21:07:39
n°860443
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-09-2004 à 21:08:21  profilanswer
 

tu peux me donner le contenu exact de la variable DLLName stp ?

n°860444
blastrock
Posté le 29-09-2004 à 21:08:47  profilanswer
 

voila : char DLLName[ ] = "Hook.dll";

n°860446
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-09-2004 à 21:11:21  profilanswer
 

bingo !  
LoadLibrary prend en argument le nom de la dll, mais sans l'extension ".dll"
=> LoadLibrary("Hook" ) et pas LoadLibrary("Hook.dll" );
 
autre chose : prend l'habitude de tester les valeurs de retour des fonctions LoadLibrary et GetProcAddress, il y a plein de raisons qui pourraient les faire foirer, et si tu testes pas pourquoi, le débuggage en sera d'autant plus ardu

n°860449
blastrock
Posté le 29-09-2004 à 21:13:39  profilanswer
 

ca marche tj pas, et de toute facon loadlibrary retournait un pointeur non NULL...

n°860454
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-09-2004 à 21:16:45  profilanswer
 

appelle un GetLastError() juste après GetProcAddress pour obtenir le code d'erreur exact

n°860456
blastrock
Posté le 29-09-2004 à 21:18:12  profilanswer
 

ca donne 127...

n°860462
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-09-2004 à 21:26:00  profilanswer
 

http://msdn.microsoft.com/library/ [...] 0-499_.asp
 
127 = ERROR_PROC_NOT_FOUND, procédure non trouvée
comme je ne doute pas un seul instant que ta dll possède bien une fonction SetkbdHook(), j'en arrive à la conclusion que tu dois être emmerdé à cause de la décoration des fonctions du C++
en gros, ta fonction exportée a été décorée par le linker.
pour remédier à ceci, tu dois donc compiler ta dll et la linker façon C, ie en désactivant la décoration des fonctions (et donc en déclarant ta dll dans un bloc extern "C", et en spécifiant une convention d'appel __stdcall)


Message édité par Harkonnen le 29-09-2004 à 21:26:34
mood
Publicité
Posté le 29-09-2004 à 21:26:00  profilanswer
 

n°860464
blastrock
Posté le 29-09-2004 à 21:28:31  profilanswer
 

tu pourais me donner un petit exemple stp, j'ai jamais utilisé extern "C"

n°860480
HelloWorld
Salut tout le monde!
Posté le 29-09-2004 à 21:40:33  profilanswer
 

Harkonnen a écrit :

bingo !  
LoadLibrary prend en argument le nom de la dll, mais sans l'extension ".dll"


:heink:
 
Telecharge dependency walker et regarde ce qu'exporte ta dll...
http://www.dependencywalker.com/


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°860492
blastrock
Posté le 29-09-2004 à 21:46:59  profilanswer
 

Ca marche comment ???  :??:  
quand j'ouvre ma dll, il y a :
 
HOOK.DLL
    KERNEL32.DLL
    MSVCRT.DLL
    USER32.DLL
 
et ya aucune de mes fonctions...

n°860502
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-09-2004 à 21:55:13  profilanswer
 

blastrock a écrit :

tu pourais me donner un petit exemple stp, j'ai jamais utilisé extern "C"


Code :
  1. extern "C" {
  2. __declspec(dllexport) void SetkbdHook(void)
  3. {
  4.             // le corps de ta fonction exportée
  5. }
  6. }

n°860503
blastrock
Posté le 29-09-2004 à 21:55:44  profilanswer
 

ha ! j'ai compris faut mettre _declspec(dllexport) devant les fonctions...
maintenant j'ai une fonction qui s'appelle _Z10SetkbdHookv dans dependency, c'est normal ?

n°860505
blastrock
Posté le 29-09-2004 à 21:57:41  profilanswer
 

le code que tu m'a donné c'est a mettre dans le prog ou dans la dll ?

n°860506
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-09-2004 à 21:58:14  profilanswer
 


c'était le cas dans une vieille version du Platform SDK, possible que ça ait changé depuis [:sinclaire]
 

HelloWorld a écrit :


Telecharge dependency walker et regarde ce qu'exporte ta dll...
http://www.dependencywalker.com/

problème de décoration de nom moi je dis :o

n°860507
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-09-2004 à 21:59:06  profilanswer
 

blastrock a écrit :

ha ! j'ai compris faut mettre _declspec(dllexport) devant les fonctions...
maintenant j'ai une fonction qui s'appelle _Z10SetkbdHookv dans dependency, c'est normal ?


et faut mettre la déclaration dans extern "C" aussi :o

n°860508
blastrock
Posté le 29-09-2004 à 22:00:25  profilanswer
 

c'est bon !!! ca a l'air de marcher !!
MERCI !! :)

n°861822
blackgodde​ss
vive le troll !
Posté le 01-10-2004 à 10:27:52  profilanswer
 

Harkonnen a écrit :

bingo !  
LoadLibrary prend en argument le nom de la dll, mais sans l'extension ".dll"
=> LoadLibrary("Hook" ) et pas LoadLibrary("Hook.dll" );


 
http://msdn.microsoft.com/library/ [...] ibrary.asp
 
If no file name extension is specified in the lpFileName parameter, the default library extension .dll is appended. However, the file name string can include a trailing point character (.) to indicate that the module name has no extension.


---------------
-( BlackGoddess )-
n°862018
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 01-10-2004 à 13:00:44  profilanswer
 

BlackGoddess a écrit :

http://msdn.microsoft.com/library/ [...] ibrary.asp
 
If no file name extension is specified in the lpFileName parameter, the default library extension .dll is appended. However, the file name string can include a trailing point character (.) to indicate that the module name has no extension.

je savais bien qu'il y avait une subtilité avec les extensions :D


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le   profilanswer
 


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

  Prob avec GetProcAddress

 

Sujets relatifs
[resolu]Forcer telechargement header() prob dans include() helpprob avec graphics.h
prob librairieprog ti 2 ( prob)
prob xmlpetit prob avec les dates
Prob de plans form/divprob avec settype (integer)
prob SQLProb pour compiler JSP
Plus de sujets relatifs à : Prob avec GetProcAddress


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