Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hostanwendung mit Plugins (https://www.delphipraxis.net/97760-hostanwendung-mit-plugins.html)

dor557 15. Aug 2007 19:48


Hostanwendung mit Plugins
 
Absicht : Eine anwendung schreiben die als Host andwendung dient.

Modular.

d.h. Ich möchte verschiedene abschnitte in dll's packen.

beispiel Haptprogramm : Rechnungen erstellen
zusatz als Dll. : Kundenverwaltung

Das programm soll automatisch in einem verzeichnis nach dll's suchen und nachschauen ob das ein Gültiges Plugin ist.

wenn ja in die Software integrieren. Im menü oder so.

Der Grund das die Software nicht Komplett neu geschrieben werden muss sondern einfach eine Dll schreiben die automatisch im Programm eingebunden wird. Ist meiner meinung nach Flexibel. Man kann das dann immer erweitern.


Gibt es da eine Möglichkeit ?

Wenn ja welche.

Danke Gruss Sascha

chaosben 15. Aug 2007 19:57

Re: Hostanwendung mit Plugins
 
Hi Sascha!

Für diesen Zweck ist bpl-Technologie von Borland absolut genial. (und nebenbei sind es in Wirklichkeit auch nur dll's).

Das heißt: wenn du sicherstellen kannst, das alle Module und das Hauptprogramm mit demselben Compiler erstellt werden: Nimm BPLs !!

Wir arbeiten im Moment @work auch an einem solchen Projekt. Wenn man erstmal die kleinen Hürden im Zusammenhang mit BPL's genommen hat, ist es eine wahre Freude damit zu arbeiten.

dor557 15. Aug 2007 20:16

Re: Hostanwendung mit Plugins
 
genau das ist das Problem an der sache.

Ich kann nicht sicher stellen das es immer der Selbe Compiler ist.... Ist ein Gemeinschafts Projekt.

Teils in C Teils in Pascal Delphi...

Wenn ich ihm sagen kann was die Dll für vorraussetzungen haben muss dann kann er damit was anfangen.

Nur dazu muss ich erst wissen wie ich das machen soll. Denn ich mache die HauptSoftware !

Dennoch danke für den Tip. Kann ich evtl. bei anderen Projekten anwenden.
Gruss Sascha

chaosben 15. Aug 2007 20:19

Re: Hostanwendung mit Plugins
 
Imho kann man die BPL's auch mit dem CBuilder von Codegear erstellen. Die sollten sich mit den Delphi-BPLs vertragen.

dor557 15. Aug 2007 20:32

Re: Hostanwendung mit Plugins
 
Ja das schon. Nur benutzt er dafür nichts von Codegear ! daher.

Gruss Sascha

gsh 15. Aug 2007 21:31

Re: Hostanwendung mit Plugins
 
Auf mein Flexibles Pluginsystem verweiß :mrgreen:

1234588 15. Aug 2007 21:37

Re: Hostanwendung mit Plugins
 
ich hab mir neulich auch was einfallen lassen muessen.
zuerst such ich mir alle dll's aus einem ordner zusammen. dann suche ich mit MSDN-Library durchsuchenGetProcAddress() meine funktion xy (je nach dem wie du sie nennen moechtest) in jeder dll. ist sie vorhanden wird die addresse bzw. der funktionspointer in ein dynamisches array geschrieben. (falls die addresse nil ist, also die funktion nicht vorhanden, kann ich davon ausgehen das es kein geeignetes plugin ist).

mein array mit den addressen setze ich dann an das ende meiner fenster prozedur und uebergebe meine parameter (hwnd, msg, wparam und lparam), sodass ich mit den plugins direkt in das programm eingreifen kann. meine dll's sind, wenn man es genau nimmt, eine verlaengerung der fenster prozedur.

das ganze habe ich noch erweitert, um es dem jeweiligen plugin entwickler zu erleichtern.
ich exportiere eine zweite funktion aus dem plugin. falls diese funktion vorhanden ist, wird es wieder einem dynamischen array hinzugefuegt. was aber viel interessanter ist, die funktion gibt einen nullterminierten string zurueck, der dann spaeter einem menu item einen namen geben soll.
gleichzeitig erwartet die funktion einen wert des typs Integer, der als button id dienen soll (es wird verhindert das eine id zweimal vergeben wird, da das 'host' programm durch inkrementieren immer eine einmalige nummer zuweist).
ein beispiel:

unser programm findet die dll abc.dll, def.dll und ghi.dll. es sucht nun nach den 2 funktionen in jeder dll (in diesem beispiel hat jede dll beide funktionen).
nun wird die zweite funktion der dll's aufgerufen, es passiert folgendes:
abc.dll bekommt nun einen integer vom host programm, angenommen es waere 100.
unser host programm bekommt gleichzeitig einen namen aus der dll, 'Plugin ABC'.

auch die def.dll bekommt eine button id zugewiesen, da es bei der abc dll schon 100 ist, muessen wir inkrementieren -> 101.
unser host programm bekommt gleichzeitig einen namen aus der dll, 'Plugin DEF'.

das selbe spielchen passiert nun mit der ghi.dll. sie bekommt die nummer 103 und gibt den namen 'Plugin GHI' zurueck.

lassen wir jetzt in unserem hauptprogramm unser popupmenu anzeigen, hat es folgende eintraege:

- ABC Plugin
- DEF Plugin
- GHI Plugin

druecken wir nun die 'DEF Plugin' schaltflaeche, erhalten wir von windows die nachricht das der button mit der id 101 gedrueckt wurde. nun kommt unsere erste importierte funktion die wir aus der dll haben ins spiel. wir geben durch den callback am ende unserer fenster prozedur, die nachricht das der buton 101 gedrueckt wurde, an jede dll weiter. die entsprechende muss nur noch darauf reagieren.


allerdings ist das nur eine anregung und sehr ausbaufaehig. dennoch ist es fuer meine beduerfnisse ausreichend =)

es ist vielleicht ein wenig grob geschrieben, dennoch denke ich das es relativ verstaendlich ist.

dor557 16. Aug 2007 19:49

Re: Hostanwendung mit Plugins
 
Glaube habe da ein Problemchen.

Ich habe noch nie Bewusst mit hwnd, msg, wparam und lparam gearbeitet.

Ich glaube zu wissen das windows diese Parameter immer braucht und benutzt. Aber bisher hat Delphi das alles für mich gemacht. Ich will wohl alles :)

Es wäre sehr nett wenn du mir sagen könntest wie ich das verwenden kann.

Ich habe momentan nur 2 Formulare. Eine Dll erstellt in der das Formular mit Hilfe von

Delphi-Quellcode:
Form1 := Tform1.Create(application);
Form1.Show;
erstellt wird.

Aber das fenster schliesst sich automatisch ohne das ich einen button gedrückt habe.

Keine ahnung warum.

Ich war der meinung das ich dem warscheinlich keine Host-Anwendung oder Sender Form schicken kann.

Ich habe auch die etwas schwerere methode vom dll einbinden genommen.

Siehe Hier

welche möglichkeiten habe ich das ic mit den beiden Formularen Form2 in Dll1 und form0 in der Application.exe

gruss Sascha

dor557 18. Aug 2007 03:37

Re: Hostanwendung mit Plugins
 
Sorry

Falsche Frage gestellt :

welche möglichkeiten habe ich das ich mit den beiden Formularen Form2 in Dll und form0 in der Application.exe zu momunizieren und daten zu übermitteln.

Mich würde das mit dem hwnd, msg, wparam und lparam sehr interresieren und in wie weit evtl. alle meine Problem lösen kann. z.b. mit hilfe von MSG was kann man da machen ??

Gruss Sascha


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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