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

Langage C++ Discussion :

callback à partir d'une dll vers le programme principal


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 40
    Par défaut callback à partir d'une dll vers le programme principal
    Bonjour, je suis entrain de créer une dll (compilée avec mingw) et je voudrais pouvoir avertir mon programme principal d'un évènement provenant de la dll. Pas de problème pour l'appel de fonction de ma dll à partir du programme mais l'inverse...
    Je pense qu'il faut utiliser des signaux mais je ne vois pas trop comment.

    Si quelqu'un avait une piste je suis toutes ouïe

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    La réponse est dans le titre : passer un callback, c'est à dire l'adresse d'une fonction ou d'un foncteur qui sera appelé par la dll.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 40
    Par défaut
    Je veux bien mais comment tu fais?

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Avec un pointeur de fonction par exemple.
    Dans la DLL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void fonction_de_la_dll(void (*callback)())
    {
        // ...
        if (évènement)
            (*callback)();
        // ...
    }
    Puis dans le programme principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void callback()
    {
        std::cout << "Évènement reçu !\n";
    }
     
    int main()
    {
        fonction_de_la_dll(&callback); // on lui passe l'adresse de la fonction à appeler
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 40
    Par défaut
    Merci, j'avais pas pensé faire ça du tout mais au final ça fonctionne bien!

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    En fait, vu qu'on est en C++, le passage d'une interface est encore mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct _novtable MonContext
    {
         virtual void mafonction(void) = 0;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MaFonctionDeDll(MonContext& ctxt)
    {
         ctxt.mafonction();
    }
    ...

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

Discussions similaires

  1. Accessibilité d'un RoutedEventHandler déclaré dans une DLL depuis le programme principal
    Par Lelio1407 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 12/06/2012, 16h36
  2. creer un fichier lib à partir d'une DLL
    Par benoit70 dans le forum MFC
    Réponses: 12
    Dernier message: 28/09/2008, 22h58
  3. [DLL] utiliser une DLL a partir d' une DLL et un .def
    Par venomelektro dans le forum MFC
    Réponses: 9
    Dernier message: 07/12/2004, 14h01
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52
  5. pb de récup de handle à partir d'une dll
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2002, 12h29

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