AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Formular in dll auslagern

Ein Thema von Cogito · begonnen am 6. Mai 2010 · letzter Beitrag vom 10. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
Cogito

Registriert seit: 12. Jun 2008
280 Beiträge
 
#1

Formular in dll auslagern

  Alt 6. Mai 2010, 08:21
Hallo zusammen,

ich möchte gerne ein Formular in eine dll auslagern und dieses dann innerhalb des Hauptprogramms modal öffnen können. Dabei sollte möglichst auf das Vorhandensein dieser dll geachtet werden, denn es soll so eine Art Zusatz (Addon Feature) zum Hauptprogramm sein, dass ich einfach hinzukopieren kann. Falls die dll nicht da ist sollte der Aufruf aber nicht das ganze Programm zum Einsturz bringen. Ich weiss dass darüber schon einiges hier im Forum geschrieben wurde, was ich aber bräuchte wäre eine Art Programmgerüst (dll gerüst + Hauptprogramm mit den entsprechenden Aufrufen). Es sollte nur eine dll mit Dummy-Formular + Hauptprogramm das dieses Formular dann startet sein, keinerlei Funktionalität. Hat jemand sowas in seinem Fundus oder kann es kurz zusammenklicken?
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Formular in dll auslagern

  Alt 6. Mai 2010, 09:19
Lade die Dll Dynamisch, wie in dem Assarbad Tutorial hier:

Delphi DLL´s

und füge das dem laden der dll einfach ein Abfrage zu, welche kontrolliert ob die Dll vorhanden ist:

Delphi-Quellcode:
//bsp aus der verlinkten pdf....
Procedure GetEntryPoints;
var
  lib:THandle;
begin
  if not FileExists('deinedll') then Exit; //<------
  lib := LoadLibrary(@szNameDLL[1]);
  case lib = 0 of
    TRUE:
      begin
        @OneFunction_CDECL := @whatifnoentry;
//....
wenn du dann dein procedure aufrufst, checkst du vorher noch mit "assigned" ob sie auch zugewiesen ist, und alles ist gut
freimachen nicht vergesen....
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.119 Beiträge
 
Delphi 12 Athens
 
#3

Re: Formular in dll auslagern

  Alt 6. Mai 2010, 09:46
Abgesehn davon, daß FileExsist nicht die selben Suchpfaden, wie LoadLibrary benutzt (eigentlich nutzt FileExists garkeine Suchpfade):

Delphi-Quellcode:
var
  Lib: THandle;
  Proc: .... // Prozedur-/Funktionszeiger

function GetEntryPoints: Boolean;
GetProcAddress
begin
  lib := LoadLibrary(@szNameDLL[1]);
  if Assigned(lib) then
  begin
    Proc := GetProcAddress(Lib, 'Prozedurname');
  end
  else
    Proc := nil;
  Result := Assigned(Proc);
end;
Und dann solltest du dir noch einige der Threads ansehen, wo jemand versuchte Teile der VCL über externe Quellen zu laden.

Es kommt darauf an, was du genau willst und wie weit die beiden VCLs interagieren sollen.
> Vieles geht einfach nicht (so leicht), da die DLL grudsätzlich erstmal ihren eigenen Speichermanager und ihre eigene RTTI besitzt, welche nicht mit denen der EXE zusammenarbeiten, bzw. sich einfach nicht verstehen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Formular in dll auslagern

  Alt 6. Mai 2010, 10:06
Zitat von himitsu:
> Vieles geht einfach nicht (so leicht), da die DLL grudsätzlich erstmal ihren eigenen Speichermanager und ihre eigene RTTI besitzt, welche nicht mit denen der EXE zusammenarbeiten, bzw. sich einfach nicht verstehen.
Lass die Finger von Delphi und dll. Du handelst dir nur Frust ein.
Das Modulkonzept von Delphi ist schon lange nicht mehr zeitgemäß.
Entweder als BPL, das gibt dann noch mehr Probleme.
Bei beiden Verfahren bist Du auf Laufzeit-BPL angewiesen und die müssen gegen die gleiche Compilerversion und Quelltextstand compiliert sein.

Entweder man verwendet ein externes(teures) Pluginsystem.
Ich habe da mit Hydra gute Erfahrungenm gemacht.
Oder man setzt auf der Com-Technologie (ActiveX) auf.
Ein Outofprocess-Server ist völlig unabhängig von der jeweiligen Delphiversion.

Gruß
Peter
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Formular in dll auslagern

  Alt 6. Mai 2010, 10:57
Hallo,

naja, soo schlimm ist es auch wieder nicht.

Speicher-Manager: Mit FastMM4 gibt es kaum Probleme.

Die Frage ist, was wird übergeben.

Strings
-> neeehhh (trotz FastMM4).


Interaktion mit dem Hauptprogramm
-> nicht direkt, kann aber über Messages gelöst werden.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.119 Beiträge
 
Delphi 12 Athens
 
#6

Re: Formular in dll auslagern

  Alt 6. Mai 2010, 11:02
Wenn man bestimmte Dinge beachtet, dann kann man schon auch Formulare in eine DLL exportieren.
Aber über BPLs läßt sich da leichter arbeiten, auch wenn es dort eine Beschränkungen gibt (wie es schon genannt wurde).

Einfacher ist es da aber, wenn man die VCL nur im Hauptprojekt verwaltet und in der DLL nur die Informationen ablegt, wie die nötige Form aussehen soll.
Ansonsten sollte man halt beide VCLs/RTTIs getrennt halten. Für den Speichermanager gibt es da das Thema Shared-Memory als Hilfmittel.


Delphi-Quellcode:
Strings
-> neeehhh (trotz FastMM4).
Entweder WideString, denn dieser ist ein Sonderfall ('ne Kapselung des "OLE-String" der OLE32Auth.dll)

ansonsten verträgt sich alles bis Delphi 2007 oder alles ab Delph 2009 (in 2009 wurde eine echt bescheuerte Neuerung eingebaut, weswegen diese Typen nun nicht mehr kompatibel zu den Alten sind)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#7

Re: Formular in dll auslagern

  Alt 7. Mai 2010, 13:33
Ein Formular (TForm) aus einer DLL aufrufen/anzeigen:
http://warnecke.xxlspeed.de/code-ora..._anzeigen.html
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Formular in dll auslagern

  Alt 7. Mai 2010, 14:14
Zitat von lbccaleb:
Delphi-Quellcode:
//bsp aus der verlinkten pdf....
Procedure GetEntryPoints;
var
  lib:THandle;
begin
  if not FileExists('deinedll') then Exit; //<------
  lib := LoadLibrary(@szNameDLL[1]);
  case lib = 0 of
    TRUE:
      begin
        @OneFunction_CDECL := @whatifnoentry;
//....
case BoolescherAusdruck of??? case ist das neue if, oder wie?
Uli Gerhardt
  Mit Zitat antworten Zitat
Cogito

Registriert seit: 12. Jun 2008
280 Beiträge
 
#9

Re: Formular in dll auslagern

  Alt 10. Mai 2010, 07:01
Na gut, also besser keine dll. Ist von der Performance vielleicht sogar noch besser wenns gleich im Programm steckt.
Wäre es denn wenigstens möglich, diesen Part des Programms mit seinen Formularen aus Entwickler-Sicht in ein eigenes Projekt auszulagern und dann aus dem Hauptprogramm das Formular modal aufzurufen? Falls ja wie geht das (bitte step by step Anleitung oder kleines Sample)?
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Formular in dll auslagern

  Alt 10. Mai 2010, 07:14
Zitat von uligerhardt:
case BoolescherAusdruck of??? case ist das neue if, oder wie?
"If" ist im Compiler immer nur "case"
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz