![]() |
Formular in DLL
Hallo Leute,
ich habe eines meiner Formulare in eine DLL ausgelagert und erzeuge und öffne das Formular von meiner HAuptanwendung aus. Funktion in der DLL um das Formular ertellen und anzuzeigen
Delphi-Quellcode:
in meinem Hauptprogramm rufe ich das ganze dann so auf:
procedure PluginForm(appHandle: THandle) ;
var oldApp : THandle ; begin oldApp := Application.Handle ; if appHandle = 0 then appHandle := GetActiveWindow ; Application.Handle := appHandle ; try with TForm1.Create(Application) do try ShowModal ; finally Release ; end ; except On E: Exception Do Application.HandleException(E) ; end ; Application.Handle := oldApp ; end ;
Delphi-Quellcode:
Natürlich nachdem die DLL ordnungsgemäß geladen wurde.
PluginForm(Application.Handle) ;
Jetzt habe ich nur das Problem das nach dem Schließen des Formulars dieser Fehler auftaucht Zitat:
Wie kann ich diesen Fehler beheben. Bitte um Hilfe, ich bin am verzeifeln. Grüße Sebastian |
Re: Formular in DLL
Ich würde das Fenster nicht der Application zuordnen (Owner). Am Besten Nil und dann beim Beenden der Dll freigeben
|
Re: Formular in DLL
Mit
Delphi-Quellcode:
tritt der selbe Fehler auf...
nil
Die DLL wird beim Beenden des Programms wieder Freigegeben. Der Fehler tritt bei Schliesen des Fensters auf. Grüße Sebastain |
Re: Formular in DLL
Du musst die form innerhalb der Dll freigeben
|
Re: Formular in DLL
Und wie gebe ich die Form in der DLL Frei?
Hat da jemand ein kleines Beispiel? Grüße Sebastian |
Re: Formular in DLL
so wie du die Funktion PluginForm hast brauchst du einfach nur noch eine weitere Funktion machen die du im OnDestroy deiner Anwendung aufrufst welche dann die Form in der DLL frei gibt.
Pseudocode
Delphi-Quellcode:
procedure PluginForm();
begin GlobalForm := TGlobalForm.Create(); end; procedure PlugoutForm(); begin GlobalForm.Release(); end; |
Re: Formular in DLL
Das ist ja auch kein Problem,
die Speicherzugriffverletzung entsteht nach dem Rechtmäßigen schließen des Formulars. Die Anwendung selber läuft weiter. Nochmals zum Ablauf. 1. laden der DLL beim Anwendungsstart 2. Öffnen des Formulars aus der DLL duch Button 3. Arbeiten mit dem Formular 4. Schließen des Formulars 5. Anwendung läuft weiter 6. Entfernen der DLL beim Anwendungs Ende Der Fehler erscheint zwischen 4. und 5. Grüße Sebastian |
Re: Formular in DLL
Es ist halt nicht so einfach, bzw. unmöglich, wenn versucht die VCL einer DLL mit der einer EXE oder anderen DLL zu verbinden.
Binde also deine Forms der DLL nicht an die Applikation der EXE. |
Re: Formular in DLL
Wie muss ich das verstehen?
Es muss doch möglich sein ein Formular aus einer DLL zu Laden |
Re: Formular in DLL
Ja aber wie schon öfters gesagt, muss die komplette Verwaltung und alle Zugriffe adaruf innerhalb der Dll erfolgen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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 by Thomas Breitkreuz