Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Formular in DLL (https://www.delphipraxis.net/146991-formular-dll.html)

himitsu 31. Jan 2010 11:40

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).

sebi87 31. Jan 2010 11:42

Re: Formular in DLL
 
Kann mir vielleicht jemand ein Beispiel Code schicken wie ich das dann machen muss?

Wäre echt super

himitsu 31. Jan 2010 11:47

Re: Formular in DLL
 
PS: Hab oben noch was dazueditiert.


Delphi-Quellcode:
PluginForm(Application.Handle) ;
Wie?
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

mkinzler 31. Jan 2010 11:51

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;
...

sebi87 31. Jan 2010 12:01

Re: Formular in DLL
 
Also wenn ich das richtig vertanden habe dann liegt der Fehler in dem Aufrauf meines Formulars
Delphi-Quellcode:
PluginForm(appHandle: THandle)
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?


Grüße Sebastian

mkinzler 31. Jan 2010 12:04

Re: Formular in DLL
 
Auf die Dll schon, aber nicht auf die (VCL-)Objekte darin

sebi87 31. Jan 2010 12:16

Re: Formular in DLL
 
Ich kapier es irgendwie nicht...

Habe den Code jetzt geändert

DLL:
Delphi-Quellcode:
procedure PluginForm ;
var
  PluginForm : TForm ;
begin
  PluginForm := TForm1.Create(nil) ;
  try
    PluginForm.ShowModal ;
  finally
    PluginForm.Release ;
    PluginForm := nil ;
  end ;
end ;
und den Aufruf:
Delphi-Quellcode:
  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;
Aber es funktionier immer noch nicht

SirThornberry 31. Jan 2010 13:17

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.

sebi87 31. Jan 2010 18:40

Re: Formular in DLL
 
Hmm also das PluginForm in der EXE ist so definiert:

Delphi-Quellcode:
  TPluginForm = procedure ;

var
  AHandle : THandle ;
  PluginForm : TPluginForm ;

sebi87 2. Feb 2010 10:12

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.
Seite 2 von 2     12   

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