Chtite question sur les DLLs

Chtite question sur les DLLs - C++ - Programmation

Marsh Posté le 17-07-2002 à 10:04:02    

Voila c ptet tout con mais comme j'y connais pas grand chose ...
Donc c un appel dynamique de la dll avec un GetProcAddress, tout fonctionne au poil ... sauf quand ma fonction a comme paramètre un (char *) ...
Je m'explique :

Code :
  1. typedef BYTE * (WINAPI * FnGBI) (void);
  2. FnGBI GetBMPImage = NULL;
  3. ...
  4. GetBMPImage = (FnGBI) GetProcAddress (hDll, "ExpGetBMPImage" );


Ca ça marche, mais ça :  

Code :
  1. typedef BYTE * (WINAPI * FnGBI) (char *);
  2. FnGBI GetBMPImage = NULL;
  3. ...
  4. GetBMPImage = (FnGBI) GetProcAddress (hDll, "ExpGetBMPImage" );


Ca marche pas !
Et ce même si le corps de la fonction est le même ! Ca me fait une erreur de debug avec un truc du genre la convention d'appel de la fonction est mauvaise ou un truc comme ça. La fenêtre d'erreur ressemble à celles qu'on a avec un mauvaise utilisation d'un new ou delete.
 
Merci d'avance.

Reply

Marsh Posté le 17-07-2002 à 10:04:02   

Reply

Marsh Posté le 17-07-2002 à 10:04:58    

ah oui je me rends compte que j'ai pas été assez clair :
l'erreur se produit au moment de l'appel de ma fonction.

Reply

Marsh Posté le 17-07-2002 à 10:06:37    

T'as fonction accepte bien un char * comme argument? (on sait jamais hein :D)


---------------
Le Tyran
Reply

Marsh Posté le 17-07-2002 à 10:08:21    

effectivement, j'ai oublié de dire qu'à chaque fois j'adapte ma fonction dans ma DLL pour correspondre au typedef ... Sinon c sur que ça expliquerait mieux pkoi ça marche pas :D


Message édité par freewol le 17-07-2002 à 10:08:34
Reply

Marsh Posté le 17-07-2002 à 10:11:11    

freewol a écrit a écrit :

effectivement, j'ai oublié de dire qu'à chaque fois j'adapte ma fonction dans ma DLL pour correspondre au typedef ... Sinon c sur que ça expliquerait mieux pkoi ça marche pas :D




 
On sait jamais  :ange:


---------------
Le Tyran
Reply

Marsh Posté le 17-07-2002 à 10:13:01    

et plutôt que d'essayer de se moquer, t'aurais pas une rmq constructive à donner pas hasard ? :D

Reply

Marsh Posté le 17-07-2002 à 10:17:00    

Il me semble qu'il y a eu le meme pb sur un autre topic. Fait une recherche. ;)


---------------
Super.
Reply

Marsh Posté le 17-07-2002 à 10:25:33    

j'ai trouvé un post de darkoli qui avait un peu le même problème, mais il conclu en disant qu'il a trouvé la solution sans la donner alors ...

Reply

Marsh Posté le 17-07-2002 à 10:26:11    

freewol a écrit a écrit :

et plutôt que d'essayer de se moquer, t'aurais pas une rmq constructive à donner pas hasard ? :D




 
Je cherche, je cherche, mais faut tjrs commencer par l'explication la plus simple.


---------------
Le Tyran
Reply

Marsh Posté le 17-07-2002 à 10:29:46    

sûrement un problème de nom décoré. un FnGBI(void) a un nom exporté FnGBI, FnGBI(char*) a un nom exporté FnGBI@c (par exemple).
 
tu prends dependency walker, tu regardes le nom de ta fonction exporté. tu fais également gaffe aux conventions d'appel (stdcall si je me souviens bien).

Reply

Marsh Posté le 17-07-2002 à 10:29:46   

Reply

Marsh Posté le 17-07-2002 à 10:37:16    

ahahahah ... j'ai honte pour moi.
En fait oui bon le nom exporté est bien le bon puisque GetProcAddresse marche. Mais le truc c que j'avais vérifié que j'avais bien un WINAPI dans mon prog, mais pas dans ma DLL, ou j'ai du le virer malencontreusement ... Résultat, je l'ai rajouté et ça marche au poil ...  
Merci bcp :jap:

Reply

Marsh Posté le 17-07-2002 à 10:42:34    

J'atais pas si loin que ça en fait :D


---------------
Le Tyran
Reply

Marsh Posté le 17-07-2002 à 10:51:52    

:sweat:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed