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

 Delphi Discussion :

Recevoir informations via dll


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 47
    Par défaut Recevoir informations via dll
    Bonjour,

    Je suis entrain de créer un programme en Delphi6 et j'aimerais pouvoir recevoir des messages via une dll.

    J'ai trouver ce code (ici) qui colle a peu près à mes attentes mais je voudrais quelques informations supplémentaire

    Dans cet exemple, on récupère les informations quand on clique sur le bouton ... moi je voudrais les recevoir automatiquement
    Dois je créer un timer pour interroger la dll constamment ou existe t'il un évènement ?

    Merci

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Tout dépend de ta DLL
    Est-ce que tu en es l'auteur ?
    Si oui, tu pourrais ajouter une CallBack procédure (voir EnumWindows comme exemple de CallBack) et donc la DLL irait lancer le code fourni par l'application

    Si non, voir si un CallBack est disponible
    Si non, effectivement, le Timer reste la solution la plus simple !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 47
    Par défaut
    Oui c'est moi l'auteur de la dll
    Je vais me renseigner sur les CallBack, merci pour la piste ShaiLeTroll

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 47
    Par défaut
    bon j'ai potasser un peu google, je n'ai pas trouver d'exemple congrès à mon utilisation

    de ce que j'ai compris, je dois dans la fonction de ma dll, faire appel à EnumWindows en pointant vers l'adresse de la fonction de mon exécutable ? c'est bien ca Shai ?

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Non, EnumWindows c'est un exemple d'appel côté Application d'un CallBack EnumWindowsProc, ça serait bien de t'entrainer à utiliser un CallBack de windows tout prêt, une fois que tu maitrise le principe, tu pouvais passer à faire le tien

    Côte DLL

    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
    type
      TEventProc = procedure(AMsg: PChar); stdcall; 
     
    var
      _EventProc: TEventProc;
     
    procedure SetEvent(lpEventProc: TEventProc); stdcall; // exportable
    begin
      _EventProc := lpEventProc; // tu le stocke dans une var ou dans un objet, à toi de voir aussi le multi-thread ... GetCurrentThreadId peut aider à gérer un tableau de TEventProc différent pour chaque thread
    end;
     
    procedure DoEvent(const Chaine: string); // méthode interne de ta DLL
    begin  
      if Assigned(_EventProc) then
       _EventProc(PChar(Chaine));
    end;
    Dans ton code de la DLL qui doit envoyer la chaine, tu appele DoEvent




    Côté Appli

    tu as fait des external ou LoadLibrary\GetProcAddress selon ce que tu préfères, je préfère le faire manuellement, cela rend ton appli moins dépendante de la DLL si la fonctionnalité n'est pas utilisé systématiquement

    tu dois aussi déclarer fonction et type
    En général, lorsque je développe une DLL, je fais aussi son header avec la déclaration des types et des fonctions (des wrapper qui me font LoadLibrary\GetProcAddress), cela évite de le refaire si la DLL est utilisé dans plusieurs applis


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    type
      TEventProc = procedure(AMsg: PChar); stdcall; 
     
    procedure SetEvent(lpEventProc: TEventProc); stdcall; external ...
     
    procedure MaProc(AMsg: PChar); stdcall; 
    begin
      ShowMessage(AMsg);
    end;
    quelque part tu appele

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SetEvent(MaProc); // ou @MaProc Delphi se débrouille avec les pointeurs de procédure ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/08/2008, 20h07
  2. retour d'information via un script PHP
    Par jpboogie dans le forum Flash
    Réponses: 3
    Dernier message: 16/09/2006, 13h28
  3. creation d un tpanel via dll
    Par dietrich dans le forum Delphi
    Réponses: 2
    Dernier message: 06/09/2006, 18h35
  4. export class via dll probleme ?
    Par cheroua dans le forum C++
    Réponses: 9
    Dernier message: 25/08/2006, 12h28
  5. Réponses: 2
    Dernier message: 21/06/2006, 14h14

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