![]() |
Re: Formular in DLL
Eine Delphi-DLL hat erstmal grundsätzlich eine eigene VCL, RTTI und ein eigenes Speichermanagement.
Die RTTI der DLL ist nicht kompatibel zu der der EXE und auch die Speichermanager arbeiten nicht zusammen. Drum ist es erstmal grundsätzlich auch nicht möglich Strings, DynArrays und Objekte über die Modulgrenzen (EXE/DLL) hinweg zu benutzen. [add] Was den Speichermanager betrifft, da gibt es das Thema "SharedMemoryManager", welches da etwas ermöglicht, aber für die RTTI gibt es sowas nicht. Einzige Möglichkeit sowas für die RTTI hinzubekommen sind Packages (Laufzeit-Packages / Runtimepackages). |
Re: Formular in DLL
Kann mir vielleicht jemand ein Beispiel Code schicken wie ich das dann machen muss?
Wäre echt super |
Re: Formular in DLL
PS: Hab oben noch was dazueditiert.
Delphi-Quellcode:
Wie?
PluginForm(Application.Handle) ;
z.B. indemdu alle Zugriffe auf die Form in der DLL auch nur innerhalb der DLL machts. Dazu zählt auch, daß du nichts von der EXE in die DLL durchschleifst. Nichtmal Strings dürfen einfach so übergeben werden. Ausnahmen: siehe oben |
Re: Formular in DLL
Füge ienfach für alle Operationen Funktionen im Interface der DLL an:
Delphi-Quellcode:
function CreateForm: Boolean;
begin Form := TDieForm.Create(Nil); ... end; procedure OpenForm; begin Form.Show; end; procedure HideForm; ... |
Re: Formular in DLL
Also wenn ich das richtig vertanden habe dann liegt der Fehler in dem Aufrauf meines Formulars
Delphi-Quellcode:
Ich muss damit es geht alle Funktionen die ich zum anzeigen Benötige also Create, Show, Destroy in der DLL erstellen und Exportieren. So greift dann das HAuptprogramm nur auf die Funktionen zu und nicht auf die DLL, richtig?
PluginForm(appHandle: THandle)
Grüße Sebastian |
Re: Formular in DLL
Auf die Dll schon, aber nicht auf die (VCL-)Objekte darin
|
Re: Formular in DLL
Ich kapier es irgendwie nicht...
Habe den Code jetzt geändert DLL:
Delphi-Quellcode:
und den Aufruf:
procedure PluginForm ;
var PluginForm : TForm ; begin PluginForm := TForm1.Create(nil) ; try PluginForm.ShowModal ; finally PluginForm.Release ; PluginForm := nil ; end ; end ;
Delphi-Quellcode:
Aber es funktionier immer noch nicht
AHandle := LoadLibrary(PChar(ExtractFilePath(Application.ExeName)+'\Plugins\Project2.dll'));
if AHandle <> 0 then begin @PluginForm := GetProcAddress(AHandle, 'PluginForm'); if @PluginForm <> nil then begin PluginForm ; end; FreeLibrary(AHandle); end; |
Re: Formular in DLL
Kannst du mal zeigen wie PluginForm innerhalb deiner Exe definiert ist?
Irgendwas verschweigst du uns denn bei mir funktioniert das ohne Probleme. |
Re: Formular in DLL
Hmm also das PluginForm in der EXE ist so definiert:
Delphi-Quellcode:
TPluginForm = procedure ;
var AHandle : THandle ; PluginForm : TPluginForm ; |
Re: Formular in DLL
Kann mir vielleicht ein Beispiel schicken wie es Funktioniert?
Wäre echt super. Danke Grüße Sebastian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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