IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Utilisation d'une dll C++


Sujet :

C++

  1. #1
    Membre r�gulier
    Inscrit en
    D�cembre 2005
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 8
    Par d�faut Utilisation d'une dll C++
    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

  2. #2
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    24
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Par d�faut
    m_pDecode est bien du type SHDECODE ??

  3. #3
    Membre r�gulier
    Inscrit en
    D�cembre 2005
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 8
    Par d�faut
    oui elle est bien d�clar� en SHDECODE.

    Le probl�me r�side du c�t� de PB, qui du jour au lendemain, et apr�s recompilation, n'accepte plus ma DLL. M�me si je recompile le code d'origine, ca plante, alors qu'avec l'ancienne DLL ca fonctionne !

    Par ailleurs j'ai valid� le fonctionnement de la DLL depuis .net et le site accepte bien le decryptage de la cl�.

  4. #4
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    24
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Par d�faut
    regarde au niveau des type des argument passer a ta fonction.

    les types sont ils les meme dans lappel de ta fonction au sein du programme et dans le prototype de cette fonction au sein de ta dll ??

    essaye de caster les argument !

  5. #5
    Membre r�gulier
    Inscrit en
    D�cembre 2005
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 8
    Par d�faut
    du c�t� C++ j'ai du char*, du c�t� PB c'est du string.

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    24
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Par d�faut
    ?????

    et bien si tu a le prototype

    void fct(char , int) ;

    il faut lors de l'appel de la fonction "fct" respecter ces types

    char a;
    int b;

    fct(a,b);

    sinon il faut tenter de caster

    fct( (char)b, (int)a ); par exemple

  7. #7
    Membre r�gulier
    Inscrit en
    D�cembre 2005
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 8
    Par d�faut
    le char * n'existe pas en PB. Pour des cha�nes de caract�res on utilise le string. Mais le probl�me ne r�side pas l� puisqu'avec ce m�me prototype de fonction ca fonctionnait parfaitement avant !

  8. #8
    Membre r�gulier
    Inscrit en
    D�cembre 2005
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 8
    Par d�faut
    Bon finalement j'ai trouv� une solution en d�clarant mes fonctions en __stdcall. Un peu logique aux vues du message d'erreur PB, mais �tonnant car ca fonctionnait bien avec une version compil�e il y a 1 mois.

    Sans doute une mise-�-jour de PB, je ne vois que ca !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Utilisation d'une dll de ClearCase (IBM)
    Par il_a_ri dans le forum Outils
    R�ponses: 6
    Dernier message: 28/11/2005, 15h29
  2. R�ponses: 6
    Dernier message: 21/06/2005, 21h45
  3. [DLL] Utilisation d'une DLL pour utiliser serveur Firebird
    Par sekiryou dans le forum Bases de donn�es
    R�ponses: 2
    Dernier message: 11/08/2004, 14h20
  4. [Info]Utilisation d'une Dll
    Par Assiobal dans le forum Eclipse Java
    R�ponses: 1
    Dernier message: 11/06/2004, 21h46
  5. Utilisation d'une dll �crite en delphi 5 dans VB6
    Par Jean-Louis dans le forum Langage
    R�ponses: 4
    Dernier message: 05/08/2002, 09h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo