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 :

Charger une dll avec MinGW


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 56
    Par défaut Charger une dll avec MinGW
    Je compile avec MinGW un programme sensé créer et charger une DLL. Apparemment la création et le chargement se passe bien, mais GetProcAddress() ne trouve pas la fonction.

    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
    #include <windows.h>
    using namespace std ;
     
    typedef int (*MYPROC)(int); 
     
    static HMODULE hdll = NULL;
     
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) {
     
        // création du fichier c qui sera compilé en dll:
        string dllstr("__declspec( dllexport ) int MyFuncInc(int a) { return ++a; }" );
        ofstream out("dll.c");
        out << dllstr << endl ;
        out.close();
     
        // Compilation pour créer la dll:
        system( "g++ -shared -o dll.dll dll.c" );
     
        // Chargement de la DLL:
        hdll = LoadLibrary("dll.dll");
        if (hdll == NULL) { cout << "LoadLibrary failed" << endl; return 1; }
     
        // chargement de la fonction:
        MYPROC MyFuncInc = (MYPROC)GetProcAddress( hdll, "MyFuncInc" );
        if (MyFuncInc == NULL) { cout << "GetProcAddress failed" << endl; return 1; }
     
        cout << MyFuncInc(41) << endl ;
        return 0;
    }

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533

  3. #3
    screetch
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string dllstr("extern \"C\" __declspec( dllexport ) int MyFuncInc(int a) { return ++a; }" );

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 56
    Par défaut
    Citation Envoyé par screetch Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string dllstr("extern \"C\" __declspec( dllexport ) int MyFuncInc(int a) { return ++a; }" );
    Merci, ca fonctionne.

  5. #5
    screetch
    Invité(e)
    Par défaut
    ah sinon j'avais pas vu que tu creais un fichier c, pas c++ (deformation professionnelle je suppose)
    lancer gcc au lieu de g++ aurait aussi resolu le probleme.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 56
    Par défaut
    Mais je peux quand même créer une DLL codée en C++ ? Ca correspond à quoi le extern "C" ? Ca signifie que je ne peux que programmer ma DLL en C ?

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

Discussions similaires

  1. charger une dll avec un .lib
    Par Nehmé dans le forum Visual C++
    Réponses: 13
    Dernier message: 26/08/2009, 14h26
  2. generer une dll avec MVC et l'utiliser avec MinGW
    Par elraton dans le forum Débuter
    Réponses: 5
    Dernier message: 30/06/2009, 11h03
  3. [windows] charger une dll (avec classe)
    Par superpok dans le forum Windows
    Réponses: 11
    Dernier message: 09/09/2007, 11h15
  4. charger une DLL avec paramètres
    Par cyberchand dans le forum C#
    Réponses: 6
    Dernier message: 29/05/2007, 16h28
  5. créér une dll avec borland c++ compiler
    Par juju62610 dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 26/02/2003, 09h46

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