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 Delphi Discussion :

Messages to delphi dll


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Par défaut Messages to delphi dll
    Salut tout le monde,

    J'ai développé une dll sous delphi utilisant un TTimer. La dll a besoin d'effectuer des taches toutes les n secondes.

    Si je branche cette dll via une application delphi tout se passe bien.
    Par contre, je rencontre un problème si je branche ma dll sur une application Java. L'evenement OnTimer n'est jamais exécuté. Je soupçonne un problème lié aux messages windows. Je pense que ma dll n'est jamais notifié de la réception par l'application du message WM_TIMER. Qu'en pensez vous?

    Connaissez vous une solution?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par défaut
    Ton Timer est juste à l'intérieur de la DLL, elle en fait quoi de l'évènement, elle appelle une procédure type CallBack ou alors juste un traitement interne ?

    Sinon, je répète, qu'un thread démarré avec DllEntryPoint serait plus efficace et plus maitrisable ...
    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 confirmé
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Par défaut
    En faite, je ne gère pas l'évènement c'est le timer qui est censé le récupérer pour exécuter dans le OnTimer un traitement interne.

    Je vais développer un Timer Perso basé sur un thread qui attend et pas sur les évènements Windows.

    Quelle est l'utilité du DllEntryPoint? je ne connais pas.
    Mon timer perso sera un composant réutilisable aussi bien dans une dll que dans un exécutable...dans ces conditions dois-je utiliser DllEntryPoint?

    Merci pour ton aide.

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 168
    Par défaut
    Essay avec l'API SetTimer(...); c'est plus efficace que d'utiliser les timer de la VCL surtout pour un usage externe !

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par défaut
    le DLLEntryPoint c'est lorsque tu charges la DLL, tu peux vouloir lancer le Timer dès le chargement (LoadLibrary) sans nécessairement devoir appeler une fonction ... pour le thread, t'emmerde pas cela a déjà été écrit,

    ça donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    type
      TTimerThread = class(TThread)
      private
        FDelay: Cardinal;
        FEvent: TThreadMethod;
      protected
        procedure Execute; override;
      public
        constructor Create(ADelay: Cardinal; AEvent: TThreadMethod);
     
        property Delay: Cardinal read FDelay; // en milli-secondes
        property Event: TThreadMethod read FEvent;
      end;
    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
    constructor TTimerThread.Create(ADelay: Cardinal; AEvent: TThreadMethod);
    begin
      inherited Create(True);
     
      FDelay := ADelay;
      FEvent := AEvent;     
     
      Self.Resume();
    end;
     
    procedure TTimerThread.Execute();
    begin
      while  not Terminated do
      begin
         Sleep(FDelay); // à souvent 0.95 milli-secondes de retard :mouarf:, mais tu as un besoin moins précis, il me semble
         Event();
      end;
    end;
    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

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Par défaut
    Merci à vous 2.

    0x44-0x43-0x53-0x43: SetTimer n'utilise pas les messages Windows?

    ShaiLeTroll: Merci pour toutes les infos. Je vais partir sur cette voie. J'ai également trouvé cette source qui est pas mal: http://www.gtdelphicomponents.gr/?p=178

Discussions similaires

  1. Messages dans une DLL
    Par oliver_mpt dans le forum Windows
    Réponses: 8
    Dernier message: 12/11/2008, 20h57
  2. [Delphi] [DLL] Problème avec un paramètre PChar
    Par Mickey.jet dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2006, 16h43
  3. Traduction C++/Delphi DLL et function Callback
    Par Crafton dans le forum Langage
    Réponses: 12
    Dernier message: 23/02/2006, 09h55
  4. Creation d'un message dans une dll non MFC
    Par dug dans le forum Windows
    Réponses: 1
    Dernier message: 29/11/2005, 12h50
  5. Comment intégrer un Delphi DLL dans CBuilder
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/09/2005, 16h49

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