Bonjour à tous, je vous expose mon probleme
Je veux qu'une application envoie des messages à une autre via une DLL
Je me suis donc fait une DLL dans laquelle j'utilise sendmessage
et dans mon application qui va recevoir les messages, je me suis fait la fonction suivante :
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 procedure fonctionQuiEnvoie(vStTYPE: Integer; vStDivers:ShortString); var CDS : COPYDATASTRUCT; envoi : TEnvoiMsg; h : THandle; begin h := FindWindow(nil, PChar('MonAppliDestination')); if h <> 0 then begin envoi.TypeMsg := vStTYPE; envoi.Date := date+time; envoi.Divers := vStDivers; CDS.dwData := 1; CDS.cbData := sizeof(Envoi); CDS.lpData := @Envoi; SendMessage(h , WM_COPYDATA , 0 , Integer (@CDS)); end; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 procedure Divers( var msg:TMessage); message WM_COPYDATA;En fait je me suis deja géré ma propre queue avec un timer qui va voir toute les 1000 ms si un message est à traiter ( c'est à dire si fObMessages.Count > 0 ). Cela permet de rendre les moments de freeze beaucoup plus rare qu'avant. Car en effet, de temps en temps, l'application qui envoie des messages via ma DLL en envoie beaucoup quasi simultanément et du coup mon APPLI DESTINATION freeze totalement et reste bloquée, avec le CPU à 100%.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure TAutoUtil.Divers( var msg:TMessage); var envoi2 : TEnvoiCls; begin with PEnvoiMsg(PCopyDataStruct(msg.LParam)^.lpData)^ do begin envoi2 := TEnvoiCls.Create; envoi2.TypeMsg := TypeMsg; envoi2.Date := Date; envoi2.Divers := Divers; fObMessages.AddObject('', envoi2); end; end;
J'ai lu qu'il fallait utilisé les PostMessage au lieu de SendMessage, mais meme en faisant un tout petit test, à priori les messages n'arrivent jamais à bon port.
Quand je fais appel à GetLastError, j'obtiens cette erreur :
Est-ce que quelqu'un aurait une idée pour solutionner le probleme ou en trouver la cause ?1159: Le message ne peut être utilisé qu'avec des opérations synchrones
Merci d'avance
Partager