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 :

Pb syntaxe appel fonction DLL


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 254
    Points : 138
    Points
    138
    Par défaut Pb syntaxe appel fonction DLL
    Bonjour,
    Je développe en C++ builder 6.0 sous XP pro SP2.
    J'essaie, à partir d'exemples, d'utiliser une fonction d'un DLL externe dont le prototype est le suivant :
    char * GetDllVersion(void)
    Mon code est le suivant (enfin une des multiples versions de syntaxe essayée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    typedef char * (*MYDLLFUNC)(void);
      HINSTANCE hinstDLL;
      MYDLLFUNC ImpFuncDLL;
      char * Nom;
     
      if ((hinstDLL=LoadLibrary("WVC-BETA.dll"))) {
              ImpFuncDLL = GetProcAddress(hinstDLL, "GetDllVersion");
              if (ImpFuncDLL) {
                  Nom = ImpFuncDLL();
              }
              FreeLibrary(hinstDLL);
          }
    Mais je reçois le message d'erreur suivant :
    cannot convert int (__stdcall *)() to char * (*) ()
    Quel est la bonne syntaxe pour déclarer le pointeur sur ma fonction MYDLLFUNC ?
    Je vous en remercie d'avance

    Kim

    J'ai également essayé de passer par ImpLib, mais le fichier généré donne également une erreur au link

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    As-tu essayé le typecast de la fonction GetProcAddress en MYDLLFUNC ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    typedef char * (__stdcall *MYDLLFUNC)(void);
      HINSTANCE hinstDLL;
      MYDLLFUNC ImpFuncDLL;
      char * Nom;
     
      if ((hinstDLL=LoadLibrary("WVC-BETA.dll"))) {
              ImpFuncDLL = (MYDLLFUNC)GetProcAddress(hinstDLL, "GetDllVersion");
              if (ImpFuncDLL) {
                  Nom = ImpFuncDLL();
              }
              FreeLibrary(hinstDLL);
          }

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 254
    Points : 138
    Points
    138
    Par défaut Pb de syntaxe
    Ca marche, je te remercie.
    Ceci dit ma fonction n'est pas détectée dans la DLL, mais c'est un autre pb

    Kim

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Peux-tu nous montrer le code de la dll, ou son fichier .h ?
    C'est certainement de ce côté qu'il faut chercher.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si la fonction est bien en C ou en extern "C", elle s'appelle sans doute _DllGetVersion@0 puisqu'elle est en __stdcall.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Erreur lors d'appel fonction DLL
    Par Sjeuil dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 18/09/2014, 10h48
  2. appel fonction DLL
    Par jackk dans le forum Windows
    Réponses: 6
    Dernier message: 21/01/2010, 20h32
  3. Réponses: 1
    Dernier message: 18/09/2009, 11h25
  4. [syntaxe] appel fonction pour cacher un formulaire
    Par helene38250 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/11/2008, 10h58
  5. Appels fonctions DLL
    Par Micka91 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 17/02/2004, 17h32

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