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 :

retiur GetProcAdress NULL - extern "C" = erreur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Par défaut retiur GetProcAdress NULL - extern "C" = erreur
    bonjour, je viens de créer une dll qui va enfaite avoir pour but d'en utiliser une autre (d'un constructeur)

    Dans une fonction de mon programme principale, je cherche à obtenir un pointeur vers une fonction de ma DLL par l'intermédiaire de GetProcAddress.

    Je procède de la manière suivante :

    //chagement de ma dll qui se charge correctement ( le pb n'est pas la)
    const wchar_t* chars =
    (const wchar_t*)( System::Runtime::InteropServices::Marshal::StringToHGlobalUni(chemin_dll)).ToPointer();
    hDLL=LoadLibrary(chars);
    if(hDLL == NULL)
    {
    MessageBox::Show("EPIC FAIL DLL ","Erreur",MessageBoxButtons::OK, MessageBoxIcon::Warning);
    }

    //et enfin j'utilise GetProcAddress
    typedef void (WINAPI* DLLFUNC)(int num_carte, int num_io, float val);
    DLLFUNC pFuncSetVal = (DLLFUNC)GetProcAddress(hDLL,"setVal");




    Dans ma DLL je déclare la fonction setVal de la façon suivante :
    void setVal(int num_carte, int num_io, float val)
    {
    val = (val/5)*255;
    OutputAnalogChannel(num_carte, num_io, val); //fonction de la DLL du construc.
    }

    Après quelque recherche et l'étude du code de retour avec GetLastError, j'ai bien compris que pFuncSetVal était NULL .

    Si je corrige mon code de la façon suivante :
    extern "C" {
    __declspec(dllexport) void setVal(int num_carte, int num_io, float val)
    {
    //code fonction setVal
    }
    }//fin extern

    L'erreur suivante apparaît :
    seconde liaison C d'une fonction surchargée 'setVal' non autorisée

    Ce qui déclenche cette erreur c'est que la fonction OutputAnalogChannel est déclarée de la manière suivante dans un .h ( qui est inclut et qui est fournit par le constructeur)

    extern "C" {
    #define FUNCTION __declspec(dllexport)
    FUNCTION void __stdcall OutputAnalogChannel(unsigned char CardAddress, unsigned char Channel, unsigned char Data);
    }

    Je voudrais savoir si qqun sais comment contourner cette erreur pour que enfin mon pFuncSetVal ne sois plus NULL ?!?
    Si vous avez besoin de plus d'informations je suis à votre disposition. Je vous remercie de votre aide !

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Par défaut
    Oups, cest une erreur de ma part enfaite, j'ai modifié le prototype d'une fonction de la dll dans le .cpp et sans le modifier également dans le .h !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. à quoi servent "extern" et "__cplusplus"
    Par yashiro dans le forum C++
    Réponses: 3
    Dernier message: 30/03/2006, 21h58

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