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

Visual C++ Discussion :

Probleme d'appel d'une dll, sans lib et sans stdcall


Sujet :

Visual C++

  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    16
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Par d�faut Probleme d'appel d'une dll, sans lib et sans stdcall
    Bonjour,

    Voila je vous explique mon probl�me, je dois utiliser des dlls que me fourni une soci�t�, mais juste des dlls pas de .lib ni de .o.

    J'ai quand m�me r�ussi � obtenir le code source mais je ne peu pas les modifier, ni les recompiler.

    Voila un bout de ce qui m'es fournit :

    fichier.c

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    __declspec(dllexport) void fct_main(long * l_a, char * c_b, char * c_c, char * c_d)
    {
    ...
    }
    fichier.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    extern void fct_main(long * l_a, char * c_b, char * c_c, char * c_d);
    Comme vous pouvez le remarquer il n'utilise pas stdcall, ce qui ne me facilite pas la tache.
    Quand j'essaye d'appeler cette fonction j'ai ce beau message d'erreur :

    Nom : MVCDL.JPG
Affichages : 72
Taille : 22,5 Ko

    -----------------------------------------------------------------------

    Apres coup j'ai effectu� des tests en cr�ant une dll.

    Pour la tester j'ai cr�e ce petit bout de code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include "stdafx.h"
    #include <windows.h>
    #include <string.h>
    #include <stdio.h>
     
    typedef void (__stdcall *FCTX1)(int a);
    typedef void (__stdcall *FCTX2)(char * a);
    typedef void (__stdcall *FCTX3)(int * a);
    typedef void (CALLBACK *FCTX4)(long *a);
     
    int main(int argc, char* argv[])
    {
    	FCTX1 E_int;
    	FCTX2 E_p_char;
    	FCTX3 es_p_int;
    	FCTX4 es_p_long;
     
    	HMODULE     ModId;
    	HMODULE     ModIdd;
    	ModId = LoadLibrary("C:\\WINDOWS\\SYSTEM32\\test_dll_simple.dll");
     
    	E_int = (FCTX1)GetProcAddress(ModId, "E_int");
    	E_p_char = (FCTX2)GetProcAddress(ModId, "E_p_char");
    	es_p_int = (FCTX3)GetProcAddress(ModId, "es_p_int");	
    	es_p_long = (FCTX4)GetProcAddress(ModId, "es_p_long");
     
    	char b[255] = "216";
    	char bb[255] = "3000001";
    	char bbb[255] = "";
    	int c = 999;
    	int  * d = &c;
    	long e = 98788;
    	long * f = &e;
     
    	E_p_char(b);
    	E_int(256);
    	es_p_int(d);
    	es_p_long(f);
     
    	printf(" %d\n",*d);
    	printf(" %d\n",*f);
     
    	FreeLibrary(ModId);
            return 0;
    }

    pour ma dll de test :

    Les 3 premi�res fonctions marche bien, mais la 4eme ou j'ai enlev� __stdcall ne fonctionne toujours pas :


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    __declspec (dllexport) void __stdcall E_int(int entree);
    __declspec (dllexport) void __stdcall E_p_char(char *entree);
    __declspec (dllexport) void __stdcall es_p_int(int *entree);
    __declspec(dllexport) void es_p_long(long *entree);




    J'ai essay� plein de m�thodes diff�rentes, je vous avoue que je ne sais plus trop quoi essayer, et je me demande m�me si c'est possible d'effectuer ces actions.

    Si quelqu'un � une id�e ou une piste je suis preneur

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    quand tu dis que tu as r�cup�r� les sources, tu as r�cup�r� le projet aussi ? tu peux voir la convention d'appel par d�faut ? c'est pas cdecl ?

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    16
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Par d�faut
    Nan j'ai pas le projet, ils m'ont fil�s :

    - .dll
    - .c
    - .h
    - .def
    - .dat
    - .obj

    Ils ont un logiciel Adelia qui leur g�n�re les dlls, le code est tr�s fouillie du coup.

    Sinon je viens de verifier mais c'est bien ce que j'ai mis : __declspec

    Qu'entend tu par convention d'appel ?

  4. #4
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    la convention d'appel, c'est ce que tu as dans les options de ton projet, pour vs2005, c'est dans propri�t�s du projet -> configuration properties -> C/C++ -> advanced -> calling convention

    et tu peux avoir :

    __cdecl (/Gd)
    __fastcall (/Gr)
    __stdcall (/Gz)
    __clrcall (si tu es en .net)

    par d�faut, c'est __cdecl en g�n�ral. T'as essay� en la pr�cisant explicitement dans ta d�claration ?

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    16
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Par d�faut
    Je ne peu pas voir les conventions d'appelles de leur dll, apres moi dans mon projet qui utilise cette dll, c'est a cdecl.

    Mon probl�me c'est que je ne peu pas leur demand� de changer quoi que ce soit � leur dll :s

  6. #6
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    je peux pas v�rifier l�, mais dumpbin.exe il le permet pas ca ?

  7. #7
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par tchern
    Mon probl�me c'est que je ne peu pas leur demand� de changer quoi que ce soit � leur dll :s
    non, mais tu peux adapter ton code pour utiliser les memes conventions d'appels pour les fonctions de la DLL...

    au lieu de coller des __stdcall par defaut, met donc des __cdecl, ca va surement arranger tes affaires

  8. #8
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    16
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Par d�faut
    Enfin j'y suis arriv� en remplacant __stdcall par __cdecl dans le programme c qui utilise la .dll .

    Ouf j'avais abandonn�, merci de m'avoir aid� �a me retire une grosse �pine du pied ^^

  9. #9
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par tchern
    Enfin j'y suis arriv� en remplacant __stdcall par __cdecl dans le programme c qui utilise la .dll .

    Ouf j'avais abandonn�, merci de m'avoir aid� �a me retire une grosse �pine du pied ^^
    heureux pour toi que cela soit r�solu.
    cependant, a ta place, je n'h�siterais pas pour leur faire remarquer que leur code manque de commentaires (j'espere que tu avais regard� la doc avant de poser la question, hein?!), et que la convention d'appel n'est pas une info minime quand on joue avec des DLL... met leur la pression pour qu'ils am�liorent un peu leur process

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

Discussions similaires

  1. R�ponses: 2
    Dernier message: 29/04/2013, 19h57
  2. R�ponses: 2
    Dernier message: 19/09/2006, 19h06
  3. Grand Probleme d'appele d'une fonction
    Par Soufyane dans le forum MS SQL Server
    R�ponses: 4
    Dernier message: 17/02/2006, 15h57
  4. probleme de debug d'une dll sur pc 64bits
    Par giova_fr dans le forum MFC
    R�ponses: 2
    Dernier message: 12/12/2005, 16h40
  5. [MFC ]Probleme de linkage d'une dll
    Par Lysis dans le forum MFC
    R�ponses: 9
    Dernier message: 22/01/2004, 14h51

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