Autor Beitrag
werkstattboss
Hält's aus hier
Beiträge: 5

win7 pro
D2007 - XE - XE2
BeitragVerfasst: Do 12.07.12 21:30 
Hallo,
ich schreibe gerade an einem System mit mehreren Teilprogrammen (separate Programme). Die Programme greifen auf eine Firebird Datenbank zu.
Dabei gibt es natürlich einige Gemeinsamkeiten zwischen den Teilprogrammen wie z.B. das User Login.

Meine Frage ist jetzt folgende:
Kann ich das Login (u.a.) als Anwendung und die Teilprogramme als DLL programmieren? (Dann würde das Login jeweils das Hauptformular sein und je nach Benutzer die DLL mit der "Anwendung" nachladen bzw. evtl Auswahl anzeigen)

Kann ich überhaupt aus einer DLL auf eine Datenbank zugreifen?

Kann ich eine "komplette Anwendung" mit mehreren Units / Forms in eine DLL auslagern?

Habe schon alles mögliche gefunden, aber nie so ganz das Richtige.

Weiß jemand was?

Danke
Rolf
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Do 12.07.12 21:49 
Ich kenne mich jetzt nicht mit Delphi aus, aber das Prinzip der DLLs ist ja immer das gleiche.

Warum sollte es nicht funktionieren?
Du kannst doch alles in eine DLL legen und von einer Anwendung oder einer anderen DLL nutzen.
Eine DLL ist fast sowas wie ein Programm, nur ist sie nicht alleine startfähig.

Theoretisch kannst du die "Haupt-Anwendung" auch so gestalten, dass sie eigentlich nur ein Darstellungs-Funktion besitzt und die Anwendungen werden dann immer mit einer DLL hinzu gefügt, die dann auch die Anwendungs-Spetzifische Darstellung abwickelt.
Das würde ziemlich gut funktionieren, wenn du dann einfach keine Forms sondern UserControls (ich weiß nicht, wie das in Delphi heißt. Ich meine benutzerdefinierte Elemente zur Form-Gestaltung) erstellst.
Dein Haupt-Programm ruft dann diesen MainControl ab, fügt ihn bei sich ein und startet dann über eine Methode (oder wie auch immer) das Teil-Programm, welches über den MainControl dargestellt wird.

Das fordert zwar, dass diese DLLs alle bestimmte gemeinsame Dinge enthalten, damit die auch gefunden werden. In C# würde ich das einfach mit einem Interface ermöglichen, das in einer weiteren DLL liegt, z.B. die, in der auch die Datenbank angesprochen wird.
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Do 12.07.12 23:37 
Man kann es so machen, aber man muss es mit dynamischen Paketen machen, dann kannst Du eine DB-Verbindung zwischen der Hauptanwendung und den DLLs sharen. Ich mache das die ganze Zeit

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
werkstattboss Threadstarter
Hält's aus hier
Beiträge: 5

win7 pro
D2007 - XE - XE2
BeitragVerfasst: Fr 13.07.12 11:10 
Das hatte ich noch nicht, verstehe also eher Bahnhof.
Dynamische Pakete?
Wo kommt das Datenmodul hin?
DB-Verbindung sharen?

Wo kann ich weitersuchen?

Danke
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Fr 13.07.12 14:33 
Das Datenmodule kannst Du in die Hauptanwendung legen oder auch in eine DLL (so was mache ich es).

Die exe und die DLLs kompilierst Du mit der Option "Dynamic runtime packages", dann musst Du zwar die BPLs mitinstallieren, aber die DLLs und die exe können sich die variables der BPLs sharen. Bestes Beispiel die Variable Application des Objekts TApplication, welches von Delphi automatisch erzeugt wird in einem Programm. Kompilierst Du ohne runtime packages, dann haben die exe und jede DLL eine eigene Instanz. Mit Runtime Packages nutzen sie eine gemeinsame und von der DLL aus hast Du zum Bsp zugriff auf Application.MainForm, um Deine MDI-Fenster ins Hauptfenster zu bekommen ohne Stress.

DB-Verbindung kann man damit auch sharen zwischen allen beteiligten. Man erstellt sie in einem Datenmodul (was auch in einer BPL liegen kann) und alle können Zugriff drauf haben. Das geht so, dass Du ein Package Projekt machst, das Datenmodul hinzufügst und die Datenbank-Verbindungs-Komponente drauflegst. Die BPL wird urspünglich von der exe geladen und das Datenmodul erzeugt.
Die DLLs binden einfach das Datenmodul ein, kompilieren es auch als dynamisches Laufzeitpaket ein und somit arbeiten sie mit der gleichen instanz wie die exe und schon haben alle den Zugriff auf die DB-Verbindung.

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
werkstattboss Threadstarter
Hält's aus hier
Beiträge: 5

win7 pro
D2007 - XE - XE2
BeitragVerfasst: Fr 13.07.12 19:01 
Danke, das hilft mir schon viel weiter.

Rolf