Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Application Events in einer DLL empfangen (https://www.delphipraxis.net/87496-application-events-einer-dll-empfangen.html)

oschulz 1. Mär 2007 13:23


Application Events in einer DLL empfangen
 
Nach mehreren erfolglosen Versuchen in meiner DLL Ereignisse zu empfangen, wende ich mich nun mal ans Forum.
Wie der Titel schon sagt, hab ich mir eine DLL mit einer EXE zum starten erstellt. Nur erhält meine DLL keine Ereignisse. zB hab ich mir ein ApplicationEvents aufs Formular gezogen, doch zeigt das Teil keine Reaktion bei Ereignissen.

Kennt jemand das Problem, bzw ein Lösung?

Bernhard Geyer 1. Mär 2007 13:49

Re: Application Events in einer DLL empfangen
 
Solange du keine gemeinsamen Laufzeitpackages verwendet hast du in Exe und DLL zwei unabhängige Application-Instanzen.

Lösung: Verwendung von gemeinsamen Laufzeitpackages.

oschulz 1. Mär 2007 14:35

Re: Application Events in einer DLL empfangen
 
Ja gut, das hat aber IMHO nichts mit den Events zu tun. Die ApplicationEvents-Komponente fängt Ereignisse vom System ab. Da sollte es doch meines Erachtens keine Rolle spielen, ob die Instanzen zusammen gehören, oder?

Es ist schon richtig, das ich diese nicht verbunden hab. Aber auch wenn ich das Handle übergebe und der DLL zuweise funktioniert das nicht.

Bernhard Geyer 1. Mär 2007 16:01

Re: Application Events in einer DLL empfangen
 
Zitat:

Zitat von oschulz
Ja gut, das hat aber IMHO nichts mit den Events zu tun. Die ApplicationEvents-Komponente fängt Ereignisse vom System ab. Da sollte es doch meines Erachtens keine Rolle spielen, ob die Instanzen zusammen gehören, oder?

Viele dieser Events sind keine System-Events sondern durch die VCL "durchgeleitete" Events. Und wenn du keine gemeinsamen Runtimepackages verwendest hast du 2 unabhängige VCL-Klassenbibliotheken!

Zitat:

Zitat von oschulz
Es ist schon richtig, das ich diese nicht verbunden hab. Aber auch wenn ich das Handle übergebe und der DLL zuweise funktioniert das nicht.

Das bringt nur was das man keine zusätzlichen Icons in der Taskleiste hat!

Robert Marquardt 1. Mär 2007 17:13

Re: Application Events in einer DLL empfangen
 
Will man Messages in einer DLL empfangen so sollte man sich mit AllocateHWnd sein eigenes verborgenes Top Level Window besorgen.
Aufpassen! In der Event-Methode von AllocateHWnd muss man unbehandelte Messages mit
Delphi-Quellcode:
Msg.Result := DefWindowProc(FHWnd, Msg.Msg, Msg.wParam, Msg.lParam);
abhandeln, sonst bekommt man so unerklaerliche Fehler wie das das Shutdown des Rechners nicht mehr geht.

oschulz 2. Mär 2007 07:36

Re: Application Events in einer DLL empfangen
 
Hallo, danke erst mal für die Antworten.

Das mit den runtime Packages scheint zu funktionieren. Nur hat das den Nachteil, das wir mit unserem Programm auch die BPLs mitgeben müssen. Das ist nicht unbedingt ideal.

Deshalb hab nun mal versucht, das AllocateHWnd zu benutzen. Das Delphi-Hilfe Beispiel ist nicht so sehr aussagekräftig.
In meine Startfunktion der DLL hab ich nun folgendes eingebunden
Code:
Application.Handle:=AllocateHWnd(WndProc);
Das bringt zumindest keine Fehler, bringt aber auch sonst nichts anderes. Kannst du mir einen Tip geben, wie ich das benutzen muss.

Gruss Oliver

Robert Marquardt 2. Mär 2007 08:31

Re: Application Events in einer DLL empfangen
 
So ist es auch falsch. Man muss sich eine eigene Variable fuer den Handle anlegen.
Danach bekommt man direkt Windows-Messages ueber die bei AllocateHWnd angegebene Methode.
Natuerlich bekommt man nicht alles was ein TApplicationEvent bekommt, da der die Messages des Hauptfensters filtert.
Was fuer Events von TApplicationEvent sollen denn genutzt werden?

oschulz 2. Mär 2007 08:49

Re: Application Events in einer DLL empfangen
 
Das mit dem TApplicationEvent war auch nur ein Beispiel zum testen ;).
Ich hab zB einen TWebbrowser, der Strg+C nicht ausführt, wenn er in der DLL eingebunden ist. In einer EXE geht das allerdings ohne Probleme.
Oder zum Beispiel bin ich grad dabei eine CHM-Datei als Hilfe einzubinden, die auf F1 reagieren sollte. Das geht in der Exe auch relativ problemlos, nur in der DLL nicht (wobei das hier aber auch andere Ursachen haben könnte, bin mir noch nicht sicher).
Prinzipiell werden aber Tastatureingaben gar nicht als Event gemeldet, was doch recht nervig ist, wenn man Globale Tastencode definieren möchte.

Robert Marquardt 2. Mär 2007 09:09

Re: Application Events in einer DLL empfangen
 
Also klassischer Fall von Problem nicht beschrieben.
Warum willst du das ueberhaupt in einer DLL machen?

oschulz 2. Mär 2007 09:25

Re: Application Events in einer DLL empfangen
 
Der Grund ist ganz einfach. Wir haben eine Hauptapplikation, an die zur Laufzeit unterschiedliche Module angebunden werden. Diese Module sind DLL's.
Das mit dem "Problem nicht beschrieben" würde ich so auch nicht sagen. Mit den TApplicationEvents kann am einfachsten getestet werden, ob events überhaupt ankommen. Deshalb hab ich das als Beispiel genommen.

hab aber grad noch ein anderen Beitrag gefunden, der das selbe Problem hat ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz