![]() |
Plugin für eigenes Programm schreiben
Ich wollte mich mal etwas mit Plugins beschäftigen. Und da dachte ich mir, dass ich ein einfaches plugin-fähiges Programm schreibe. Ich habe hier im Forum schon mal gesucht, aber nur Threads gefunden, die sich damit beschäftigen Plugins für andere Programme zuschreiben.
Erstmal geht es mir nur um allgemeine Dinge, also Schnittstellendefinition in der Anwendung und und dem Plugin. Wie man dann die Funktionen aus dem Plugin aufruft etc. Edit: Habe gerade das Tutorial von sakura entdeckt. :? Edit2: Habe es auf meine Art und Weise hinbekommen. Wer mein Ergebnis sehen will, kann es hier in Form einer Demo-Anwendung runterladen: ![]() |
Re: Plugin für eigenes Programm schreiben
Zitat:
die Demo Anwendung funktioniert tadellos. Aber wenn du dann eine richtige Anwendung schreibst, würde ich das Plugin unbedingt auf gewisse Informationen des Programms zugreifen lasse. (Bei einem Text-Editor beispielsweise auf den aktuellen Text im Editor etc.). Zudem könntest du das Thema Plugins auch gleich zum Anlass nehmen dich mit Interfaces zu beschäftigen ;) mfG mirage228 |
Re: Plugin für eigenes Programm schreiben
Zitat:
Zitat:
Zitat:
|
Re: Plugin für eigenes Programm schreiben
Zitat:
Zitat:
|
Re: Plugin für eigenes Programm schreiben
Mal eine Frage zu einem ganz anderen Plugin Konzept:
Kann man eine Verbindung zwischen einem Plugin & einer Anwendung herstellen und diese dann als ständige Kommunikationsverbindung aufrechterhalten, so das Befehle zwischen dem Plugin & der Anwendung ausgetauscht werden & diese sich gegenseitig beeinflussen, quasi Arbeitet das Plugin im Hintergrund immer weiter (bis es beendet wird o. seine Aufgabe erfüllt hat) und der Benutzer kann trotzdem weiter arbeiten. |
Re: Plugin für eigenes Programm schreiben
dann müsstest du mit Threads arbeiten.
|
Re: Plugin für eigenes Programm schreiben
Zitat:
|
Re: Plugin für eigenes Programm schreiben
Hallo!
Ich wollte mich genau in diesem Augenblick auch mit dem Thema beschäftigen und mir dazu die Demo mal saugen. Leider ist der Link tot! Habe auch mal auf der Home von Luckie geschnüffelt, konnte es aber leider nicht finden. Wer kann den korrekten Link nochmal posten??? |
Re: Plugin für eigenes Programm schreiben
Zitat:
![]() |
Re: Plugin für eigenes Programm schreiben
Hallo!
Vielen Dank! Hätte ich genauer hingesehen, hätte ich es auch finden können, zumal ich in diesem Ordner war. Ok, also cich habe mir Dein kleines Projekt mak abgesehen und natürlich auch gleich für meine Zwecke benutzt. Nun versuche ich aber, und ich denke, dass ist eine der Aufgaben eines Plugins, mit meinen anderen Formularen zur kommunizieren. Folgende Probleme habe ich dabei: 1. Da der Treiber und das Projekt einen Ordner tiefer ist, kann ich nicht einfach in der Uses-Klauses den oder die FormNamen angeben, die mit eingebunden/verlinkt werden sollen. Ich habe es dann über die ProjektOptionen gemacht und dort gesagt, dass als Suchpfad der höhere Ordner benutzt werden soll. Seitdem erhalte ich auch Zugriff und Syntaxvorschläge für die Forms. Aber wenn ich nun ein DBGrid auf das Plugin-Form lege und dann per Button sage:
Delphi-Quellcode:
erhalte ich immer wieder eine Fehlermeldung. Warum kann ich vom Plugin nicht auf die anderen sachen zugreifen? Wenn ich diesen Code vom Hauptformular aus aufrufe, gehts doch auch..
ShowMessage(dm.ADOTable1.TableName);
//oder das hier DBGrid.DataSource:=dm.Datasource1; |
Re: Plugin für eigenes Programm schreiben
Hi Luckie,
wenn ich dein Demo richtig verstehe: Das Hauptprogramm sucht die passenden DLL(s) und erzeugt dafür Menuitems im Hauptprogramm? Beim Anklicken eines dieser neuen Menuitems im Hauptprogramm passiert dann was? Das Plugin schickt einen "statischen" Befehl an das Hauptprogramm zurück und das Hauptprogramm tut dann das, was es sowieso schon ohne Plugin kann? Entweder habe ich dein Demo überhaupt nicht kapiert oder es hat mit Plugins (noch recht) wenig zu tun ;-) Plugins bringen m.M.n. nur was, wenn sie mit dem Hauptprogramm auch Daten - die irgendwie gegenseitig übergeben werden können - austauschen können. Zur Plugin-Programmierung bring Google leider so gut wie nix Brauchbares, daher trotzdem vielen Dank für deinen Ansatz!!! Erhol dich gut in Irland! lg |
Re: Plugin für eigenes Programm schreiben
Wo kann denn das Programm was, was es schon ohne PlugIn könnte? Wenn du mal genauer hingekuckt hättest, dann würdest du sehen, dass die Dialoge, die erscheinen, wenn man auf die Menüeinträge klickt, aus den PlugIn DLL kommen.
|
Re: Plugin für eigenes Programm schreiben
Mir sehr peinlich aber leider wahr:
Mein Delphi hat mir die "FormUnit.pas" aus dem Plugin-Ordner auch im Hauptprogramm "PluginDemo.dpr" deiner Demo angezeigt :oops: Nehme daher Alles zurück und behaupte vorsichtshalber das Gegenteil :mrgreen: Bis auf: Zur Plugin-Programmierung bring Google leider so gut wie nix Brauchbares, daher trotzdem vielen Dank für deinen Ansatz!!! Erhol dich gut in Irland! lg Edit: Und öftermal nach Mitternacht habe ich vielleicht manchmal "Konzentrationsschwächen" :wall: |
Re: Plugin für eigenes Programm schreiben
Das ganze ist ja nicht mehr ale Proof of Concept. Da die Hostanwendung ja selber nichts kann, war es eben auch schwer bis unmöglich dass die PlugIns was sinnvolles machen. Würde ich eine Plaugin fähige Anwendung entwerfen müssen, dann würde ich eine DLL schreiben, die alles nötige exportiert. Und wenn dann jemand kommt und sagt, "mein Plugin bräcuhte noch das und as aus deiner Anwendung" (Hanle auf Edits oder Menüs oder irgendwelche Pfade, dann kann man die DLL einfach ergänzen.
|
Re: Plugin für eigenes Programm schreiben
Kann mir denn eigentlich jemand sagen, wie ich nun eigentlich vom Hauptformular auf ein Plugin zugreifen kann, von dem ich gar nicht weiss, was es kann, oder wie ich dem Plugin Daten senden kann?
|
Re: Plugin für eigenes Programm schreiben
Wenn du nicht weißt, was es kann, dann ist es kein Plugin für deine Anwendung, denn du gibst vor, wie sich ein Plugin zu verhalten hat. Was es intern macht, spielt keine Rolle, solange es sich bspw. mit einer bestimmten Funktion beim Hauptprogramm anmeldet, und solange der Aufruf der Plugin-Funktion durch einen bestimmten Befehl festgelegt ist. Nach dem Muster funktionieren IMHO alle Plugins.
|
Re: Plugin für eigenes Programm schreiben
Zitat:
PlugIns machen i.d.R. folgendes: - sie greifen auf eine Schnittstelle zu, die das Hauptprogramm bereitstellt, um z.B. irgendwelche Daten lesen zu können. Z.B. Stellt ein Grafikprogramm über die Schnittstelle einen Zugriff auf das aktuelle Bild bereit. Das Plugin kann dann z.B. das Canvas des Bildes bearbeiten - sie stellen dem Hauptprogramm "Aktionen" zur Verfügung - in Form von Menüpunkten - die man dann im Hauptprogramm auswählen kann, die Abarbeitung findet aber widerum im PlugIn statt Gruß Igotcha |
Re: Plugin für eigenes Programm schreiben
ein grosses Aah hat sich soeben eingestellt!
Wie könnte ich also dem Plugin teile meiner Datenbank zur Verfügung stellen? Wenn ich im Plugin selbst auf mein Datenmodul zugreifen will und so was probiere schmiert mir alles ab:
Delphi-Quellcode:
Und das, obwohl Datenmodul per uses dem Plugin bekannt ist.
Plugin.AdoTable.Assign(Datenmodul.AdoTable);
Was mache ich falsch? |
Re: Plugin für eigenes Programm schreiben
Zitat:
Ich arbeite selbst an einer modularen Awendung, wo das Hauptprogramm nur eine minimale technische Funktionalität und rein gar keine fachliche besitzt - diese steckt in den Modulen (ich arbeite mit BPLs und da stecken die Forms, etc. drin). Da dies hauptsächlich datenbankbasierte Module sind, stelle ich vom Hauptprogramm aus verschiedene Query-Komponenten zur Verfügung, mit denen die Module arbeiten können. Dazu ist es bei mir notwendig, dass die Module alle von einer gemeinsamen Basisklasse abgeleitet sind und die "MainForm" in der Uses-Klausel aufnehmen. Damit aus den Modulen und dem Hauptprogramm später auch "eine" Applikation wird, sind alle Module mit Laufzeitpackages kompiliert. In den Modulen greife ich dann auf eine Query z.B. so zu:
Delphi-Quellcode:
Wobei "AOISUserID" z.B. auch eine Variable des Hauptprogramms ist, auf die alle Module zugreifen können.MainForm.AIOSZQR0.SQL.Text:='SELECT o.* FROM kom_pup_org o, kom_pup_org_user u WHERE o.o_id = u.org_id AND u.user_id =:user ORDER BY o.o_order DESC'; MainForm.AIOSZQR0.ParamByName('user').AsInteger:=AIOSUserID; MainForm.AIOSZQR0.Open; Diese jetzt endlich für mich funktionierende Technik habe ich auch nicht alleine zustande gebracht, sondern ein Gerüst gefunden (Dank nochmal an Hagen), welches ich mir auf meine eigenen Bedürfnisse angepasst habe. Grundsätzlich ist dieses Thema nicht einfach, da man verschiedene, essentielle technische Sachen beachten muß, damit wirklich später alles in einem "Applikation-Raum" zusammenspielt. Diese ganzen Demos á la "Eine Form aus einer DLL anzeigen" etc. sind meiner Meinung nach völlig für den Eimer, da sich diese geschickt um die eigentlichen Probleme drücken. Gruß Igotcha |
Re: Plugin für eigenes Programm schreiben
Tja den Eindruck habe ich auch!
Vielleicht könnte es mir schon helfen, wenn ich mir mal grundsätzlich ansehe, wie man ein DLL erstellt und zur Laufzeit einbindet, denn das ist doch eigentlich auch NUR ein Plugin, oder? Jedenfalls bin ich mit den Tuts und Demos nur bedingt klargekommen. Meine Anwendung hat mich sehr intensiv mit Fehlermeldungen und Abstürzen bombardiert, als ich erstmalig versuchte die Plugins zu laden. Das selbst ging ja noch. Das Anzeigen der Forms der Plugins auch, aber sobald das Wichtigste, nämlich die Kommunikation zwischen beiden kam, war schluss! Leider habe ich von bpl´s noch nichts gehört. Werde mal sehen, wo man noch Hilfe finden kann, denn ich muss dieses mal erstmalig modular arbeiten und eigentlich wil ich das auch endlich mal kapieren und nutzen! Danke Tom |
Re: Plugin für eigenes Programm schreiben
Also DLLs werden "normalerweise" auch nur für Funktionen genutzt, die man einmal auslagert, um sie in verschiedenen Programmen nutzen zu können - Recycling sozusagen ;-)
Deshalb hat eine DLL erstmal nur sehr bedingt etwas mit einem "PlugIn" zu tun, da dieses i.d.R. mehr können soll, als nur Funktionen z.B. zur Berechnung bereitzustellen. BPLs (Borland Package Libraries) sind wie DLLs, nur eben Delphi-spezifisch und eigentlich dazu gedacht, Forms, Units, etc. in ein Package zu packen. Gruß Igotcha |
Re: Plugin für eigenes Programm schreiben
Hi. Also wenn du nicht weißt, wie du dem Plugin Daten übergeben musst, wird sich wohl das Plugin darum kümmern müssen, die benötigten Daten zu bekommen.
|
Re: Plugin für eigenes Programm schreiben
Könntest Du mir vielleicht noch einen Wink geben, wie man eine solche BPL erstellt und dabei auch noch alles Richtig macht???
@Stanley Ich hatte doch geschrieben, dass ich Probleme dabei hatte und eine Fehlermeldung erhielt, die ich nicht deuten konnte, da es eine Fehleradresse war und wohl auch der Kernel betroffen war. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr. |
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-2025 by Thomas Breitkreuz