Bonjour,

j'ai externalisé certaines de mes fonctions dans une dll. Cette dll est ensuite utilisée par un programme powerbuilder mais également par un site en .net.

Voici le prototype d'une des fonctions :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
extern "C" __declspec(dllexport) int fx_decode_activation(const char *cle, char *code)
Elle permet de décoder la clé d'activation passée en paramètre et sa valeur est placée dans la variable "code".

Lors de la 1ère compilation pas de souci. Mais j'ai du apporter quelques modifications et depuis ca ne fonctionne plus. J'ai testé ma dll depuis un programme C++ et ca fonctionne correctement avec la déclaration suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
typedef INT (__cdecl *SHDECODE) (const char *, char *);
m_pDecode = (SHDECODE)GetProcAddress(hRestaurationdll, _T("fx_decode_activation"));
Donc pas de problème du côté de mon code. Mais ce qui est plus étonnant, c'est que ca ne fonctione plus sous powerbuilder alors que je n'ai rien modifié dans les déclarations de mes fonctions. Lorsque j'exécute mon programme j'ai l'erreur suivante :

Application terminated.

Error : Specified argument type differs from required argument type at runtime in DLL function gfx_decode_activation. (invalid stack pointer on return from function call) at line 27 in pfc_preopen event of object w_connection.
Ca donne l'impression que powerbuilder appelle la fonction en stdcall et que la pile est erronée au retour. Mais je le répète rien n'a été modifié dans les définition et ca fonctionnait très bien avant que je recompile ma dll.

Alors si quelqu'un a une idée sur la question je suis preneur car ca fait depuis le début d'après-midi que je cherche sans trouver !

Merci d'avance