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

Windows Discussion :

Messages dans une DLL


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 68
    Points : 44
    Points
    44
    Par défaut Messages dans une DLL
    Bonjour,

    C'est surement une question de débutant : Je voudrais écrire une DLL en C++ qui communique avec le programme principal par le biais de messages windows (messages utilisateurs). Je ne comprends pas bien comment le code de la DLL peut interagir avec la boucle de message de l'application principale, et je n'ai pas trouvé de doc claire à ce sujet.
    Quelques mots d'explication serait les bienvenus ...

    Merci

  2. #2
    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
    Ce que tu cherches à faire n'a généralement pas de sens à moins que la DLL démarre d'elle-même un nouveau thread, ou expose une fenêtre (ou un contrôle).
    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.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Oui, exactement,

    ma DLL demarre un thread qui initialise un socket pour une connection réseau. Il doit aviser l'application quand il est connecté, et quand il reçoit un message.

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par oliver_mpt Voir le message
    Bonjour,

    C'est surement une question de débutant : Je voudrais écrire une DLL en C++ qui communique avec le programme principal par le biais de messages windows (messages utilisateurs). Je ne comprends pas bien comment le code de la DLL peut interagir avec la boucle de message de l'application principale, et je n'ai pas trouvé de doc claire à ce sujet.
    Quelques mots d'explication serait les bienvenus ...

    Merci

    Ca tombe bien je suis en train de bosser là dessus
    Dans la DLL il suffit d'envoyer au HWND du programme principal un message personnalisé WM_USER+ constante et les bons parametres avec PostMessage ou SendMessage
    Dans le programme principal il suffit dans la boucle de message de récupérer ce WM_USER et faire des actions en conséquence
    Dans le programme principal, on peut charger la dll avec LoadLibrary et mettre des pointeurs de fonctions sur la dll.
    Dans la dll déclarer les fonctions comme exportées il est souhaitable de faire un fichier .def

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Merci Mat !

    Je vois le truc, merci pour ta réponse rapide,

    Olivier

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Pour moi, cela entraine un couplage fort entre la dll et l'exécutable.
    Ils doivent se partager la signification des différents messages.
    Cela contrevient à la conception générale d'une dll.
    Je serais plus adepte de l'utilisation d'une interface et du passage du pointeur sur une implémentation de cette interface dans une fonction d'initialisation de la dll.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Salut Bacelar,

    Tu as tout à fait raison, dans mon cas, je vais fournir la DLL à des utilisateurs avec une doc indiquant la gestion de messages à mettre en place (2 en fait ...)
    Ce n'est pas très handicapant, mais j'en convient, pas très propre ...

    Par contre, j'avoue mon ignorance : une interface c'est quoi ? c'est de la programmation COM ?

    Olivier

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Une Interface, c'est une classe abstraite pure.
    Une classe dont toutes les méthodes sont abstraites (virtuelle pure, =0).
    C'est un concept Objet venant de COM -> JAVA -> .NET.
    Ce n'est qu'un concept qui n'est pas lié à un langage ou un environnement d'exécution.
    Il est implémentable en C++ de base avec une classe abstraite pure.

    En utilisant une interface correctement, on ne fera aucune assertion sur l'environnement d'exécution (MFC /non MFC, thread graphique/non graphique, C runtime en Dll ou en static etc...). Voir aucune assertion sur le langage d'implémentation si un utilise des interfaces CORBA ou COM ou .NET.

    En utilisant une interface, le seul lien entre la dll et l'exécutable est exprimé sous la forme d'un fichier .h et les commentaires adéquates.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Intéressant,

    Je vais creuser et améliorer ma culture informatique en ce sens. Merci pour l'info !

    Olivier

Discussions similaires

  1. Appel d'une methode de classe par message inopérant dans une dll
    Par Jacques Deyrieux dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 10/08/2010, 08h10
  2. Message d'erreur dans une dll
    Par soso78 dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/12/2007, 11h28
  3. Creation d'un message dans une dll non MFC
    Par dug dans le forum Windows
    Réponses: 1
    Dernier message: 29/11/2005, 12h50
  4. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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