Autor Beitrag
bayou
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 88


D6 PE
BeitragVerfasst: Mi 22.06.05 15:55 
ich hoffe ich bin hier richtig mit meiner Frage (ansonsten bitte verschieben).

Ich führe von einem Freund ein Projekt weiter und möchte dieses um verschiedene Formulare ergänzen. Der Anwender soll aber selber entscheiden können, ob er dieses Feature benutzen möchte oder nicht.
Um das Projekt nicht aufzublähen würde ich gerne die Formulare in DLL's auslagern.
Jetzt meine Frage, ist so etwas überhaut mölich und wenn ja wo kann ich etwas darüber erfahren.
Über DLL's habe ich schon etwas gelesen aber noch nichts gefunden wie man ein ganzes Formular bildet.

Ich hoffe die Frage ist nicht zu blöde und Ihr könnt mir was dazu sagen.
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Mi 22.06.05 16:04 
Das geht schon[ but no warranty that it works:] Du musst in das DLL Projekt halt eine Form einfügen. Dann machst du eine Procedure in die DLL, die dann die Form erstellt und anzeigt (mit ShowModal). Dazu musst du dann evtl. Steuerungsproceduren schreiben, die die Hauptanwendung benutzt.
Allerdings hat das ganze einen Haken. Wenn du in jeder DLL die VCL benutzt bläht sie sich riesig auf und bei mehreren sind das schon mal n paar MB... Du könntest dich da an API Programmierung setzen, davon hab ich halt keine Ahnung
bayou Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 88


D6 PE
BeitragVerfasst: Mi 22.06.05 16:15 
ne blöde Frage


was bedeutet API?
und gibt es noch ne andere Lösung die ich versuchen könnte?
z.B aus einem Projekt ein 2. Projekt steuern oder so?
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Mi 22.06.05 16:19 
Ja wäre schon möglich, aber komplizierter glaub ich. Google mal nach Interprocess kommunication oder so was. Da gibt es ein paar Freeware Sachen die auf der Windows Message WM_COPYDATA aufbauen. Das blöde iss dann bloß, dass du dann immer noch ein zusätzliches Programm starten musst. Und da bin ich der Faule und verwende die JVCL dazu (TJvCreateProcess), aber es müsste auch irgendwie mit ShellExecute... gehen.
bayou Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 88


D6 PE
BeitragVerfasst: Mi 22.06.05 19:00 
wenn ich mir das so überlege?

Wenn ich den WinAmp nehme und mir solche DLL's wie den Peacemaker einfüge?
wie wurde das denn gemacht?
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 22.06.05 19:12 
Nochmal: Die Formulare werden mit der VCL erzeugt. Das ist eine ziemlich dicke Klassenbibliothek, die jedesmal in die DLL mit reingelinkt wird. Man kann allerdings so kompilieren, das die VCL aussen vor bleibt, denn eigentlich ist sie auch so eine Art DLL.

Wenn Du also in den Optionen das einlinken bestimmter Run Time Packages ausschaltest (Komponenten->Packages installieren), dann wird die DLL kleiner. Dann musst Du nur diese Packages mit ausliefern, d.h. im DLL-Verzeichnis bzw. Windows/System32 - Verzeichnis installieren/kopieren.

Wie das genau geht, (und ob ich Recht habe oder nicht) steht in der Delphi-Hilfe. such mal nach 'Run Time Packages' oder so...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 22.06.05 19:26 
Wenn Du auch in der DLL die VCL vernünftig nutzen möchtest, kannst Du auch Packages nutzen; musst dann aber sowohl in der Hauptanwendung als auch der DLL Packages zur Laufzeit linken. Der Vorteil gegenüber normalen DLLs ist, dass Du eine gemeinsme Speicherverwaltung hast und auch Objekte zwischen der Hauptanwendung und der DLL austauschen kannst. Nachteilig ist aber, dass du die vollständigen VCL-Packages von Delphi mitgeben musst, die einige MB umfassen.

Die DLL behandelst Du dann wie ein stink normales Package (und implementierst dieses auch genauso).

Zum Laden rufst Du einfach LoadPackage('extension.bpl'); auf. im Package selber musst Du deine Formularklasse mit RegisterClass registrieren und kannst diese dann mit FindClass('TFormDLLExtensionClass') instantiieren. Eine Grunddefinition für ein Interface sollte aber in der Hauptanwendung bereits implementiert sein und mit {$WEAKPACKAGEUNIT ON} gekennzeichnet sein.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
GPVG
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 14.07.05 19:06 
Ein Formular in eine DLL packen ist eigentlich kein Problem. Einfach ein DLL-Projekt anlegen und dann Formular hinzufügen.

Den Teil
ausblenden Delphi-Quelltext
1:
2:
3:
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;

mußt Du allerdings selbst einbauen, wo er richtig ist.

Außerdem muß Du ganz unten im Quelltext die Funktionen nennen, auf die das externe Programm zugreifen soll. Das sieht dann so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
exports
  function1;
  procedure2;
  function3;
end.


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 14.07.05 20:32 
In diesem www.luckie-online.de...hi/Importe/Assarbad/ DLL Tutorial wird gezeigt, wie man Formulare in DLLs packt.