Hallo, ich versuche seit Tagen vergeblich ein Anzeigefenster aus einer DLL heraus zu erzeugen. Als erstes hatte ich CreateWindowEx (so wie in PurboPASCALs TemplateScreenSaver hier
www.delphi-forum.de/viewtopic.php?t=91607) versucht - ging nicht. Dann habe ich ein Formular in der DLL erstellt. Der Code ist dem einer Anwendung jetzt sehr ähnlich:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| library FensterErstellen;
uses Forms, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Dialogs, Unit1 in 'Unit1.pas' ;
procedure Create; begin Showmessage('hy'); end;
exports Create;
begin Application.Initialize; Application.CreateForm(TForm1, Form1); SendMessage(Form1.Handle,WM_CLOSE,0,0); end. |
Dadurch erhalte ich ein Fenster, dass aber sofort wieder zu geht (Und mit diesem auch das Programm, dass die DLL (dynamisch) geladen hat
).
Naja - mit
Application.Run bleibt das Fenster offen aber das Programm, das die DLL geladen hat hängt solange das Fenster offen ist. Eigentlich wird das Fenster zweimal geöffnet. Wenn ich es schließe, ist es sofort wieder da (Solange hängt die Host-Anwendung komplett). Dann (nachdem ich es also mit
SendMessage(Form1.Handle,WM_CLOSE,0,0); geschlossen habe) läuft die Host-Anwendung teilweise weiter, verarbeitet Messages, aber die Procedure Create kann immer noch nicht gestartet werden
.
Ich habe gedacht, wenn ich das Application.CreateForm, und so, mit in diese Procedure schreibe, würde es gehen aber dann erhalte ich den Fehler "Unbekannte Direktive: Application".
Wer kennt sich damit aus?
Wie kann ich aus der DLL heraus ein Zweitfenster öffnen ohne dass die Host-Anwendung hängt?