Plugins für meine App - Wie ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Plugins für meine App - Wie ?

Beitrag von scholly »

moin, moin...

Ich spiele mit dem Gedanken, meiner Video-DB eine Schnittstelle für Plugins zu spendieren, hab aber keinen Schimmer, ob/wie das mit PB zu realisieren wäre.

Es geht im Prinzip darum, daß meine App die Eingabe von Meta-Infos (Jahr, Herkunft, Regisseur, Genre und so'n Kram) von Hause aus nur manuell gestattet.
Wenn sich nun jemand die Arbeit machen will und für eine Internet-Quelle (IMDB, Allmovies etc.) ein "Auswertungs"-Plugin schreiben will, brauchts ja einen Weg, wie meine App das Plugin zur Arbeit veranlaßt und wie die gewonnen Daten in meine App kommen.

Bisher fallen mir eigentlich nur "externe DLL" und "zusätzliche Exe über STDin/STDout/STDerr" ein.

Da steh ich nun, ich armer Tor... ... aufm Schlauch :lol:

Kennt jemand irgendwas (Tutorial, Beispiel, Forum-Thread), wo ich mir entsprechendes Wissen anlesen könnte?

mDv...
scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Ich würde es unter Windows mit einer DLL machen, die gewisse öffentliche Funktionen zur
Verfügung stellen muss, damit sie in deinem Programm funktioniert. Das sind dann
Callbacks, die du mit entsprechenden Daten füllst und sie erledigen den Rest und geben dir
die Daten zurück. Da kannst du dann auch eine Art Message-System einbauen wie mit den
Window-Events. Genauso muss die DLL entweder Zugriff auf die Datenbank oder das
einzelne Objekt bekommen oder dir zurückmelden, was du nun mit den ausgewerteten
Daten machen sollst.
Dabei musst du natürlich vorher festlegen, was das Plugin überhaupt alles machen darf.
Wäre ja blöd, wenn ein schlechtes Plugin auf einmal die Datenbank zerschießt.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Ich habs mir von der Menge der Daten abhängig gemacht, ob ich die
Konsolen (stdin, stdout) nutze oder doch besser eine DLL.

Die Konsole hat den Vorteil, dass bei einem Fehler im Plugin nur das PlugIn
abstürzt und dein Hauptprogramm lediglich den Absturz des Programms
bemerkt. Wird in einer DLL aber z.B. ein IMA praktiziert, kann das gesamte
Programm abschmieren.

Die übergabe der Daten wird bei der Konsole durch einen vortlaufenden
Fluss an Daten realisiert, also ein Stream. Hm, das PB rohe Daten per
Konsole verarbeiten kann hatte ich bis grad eben wieder verdrängt ^_^
Ähnlich wie bei der Netzwerkkomunikation musst du dir also ein Protokoll
entwerfen, mit welchem du die Daten/ Befehle zwischen deiner Applikation
und dem PlugIn austauschen kannst.

Die DLL hingegen wird so genutzt wie deine eigenen Prozeduren. Du musst
dir hierfür also feste Prozedurnamen samt Parameter und Rückgabewerte
überlegen so wie natürlich die Aufgabe, die die jeweiliege Prozedur haben
soll.

Ansonnsten fällt mir nur ein, dass Konsolenprogramme ohne weiteres auch
auch auf Linux laufen sollten, während die DLLs natürlich in das
entsprechende Linuxformat kompiliert werden müssen, aber die EXE laufen
ja auch nicht ohne neu Kompilieren da drauf ... also kein wirklicher
unterschied.

Letzendlich liegt es also wohl an dir. Kommunikation per Dateistream oder
Prozeduren bzw. unabhängig von der stabilität des PlugIns oder davon
ausgehen, dass die PlugIns vernünftig funktionieren und keine schweren
Fehler produzieren.

Für dein Problem würde ich DLLs nehmen, wobei letzten endes eigentlich
nur ein Datenfluss entsteht ... weshalb vielleicht der Datenstream doch
besser sein könnte. Ach ja, Strings aus DLLs sind nicht so möglich, wie du
es bei deinen Prozeduren machst ... wenn ich mir überlege wie ich mich da
winden musste, bis ich ne nun ne entgültigke Lösung hatte für größere
Listen ... ich empfehle dir dann wohl doch besser die Konsole :D

Hm, du könntest ja mal nach "Protokoll" suchen ... die Konsolenbefehle
der Hilfe sind ansonnsten selbsterklärend. Wenn man erst mal den Sinn
verstanden hat sollte der Rest nicht mehr so schwer sein :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Eigentlich soll so ein Plugin nur "beschaffen" dürfen.

Unkorrekt ausgedrückt:
"Füll mir diese Struktur und gib sie mir zurück."

Die gewonnenen Daten in dieser "Struktur" auszuwerten und in meine DB zu schreiben, bleibt Aufgabe meiner App.

Wäre das Clipboard nicht ein geeigneter Weg?
Sowohl eine Exe, als auch eine DLL könnten ein "Preference file" dort ablegen und meine App das mit simpelsten Mitteln auslesen.
Oder mach ich da einen Denkfehler?
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

scholly hat geschrieben:Wäre das Clipboard nicht ein geeigneter Weg?
Bloß nicht! Das Clipboard sollte tunlichst nicht für solche Zwecke
missbraucht werden. Das CB brauche ich (als User) für meine
Copy & Paste Aktionen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Die Zwischenablage ist für den Benutzer gedacht und keine Schnittstelle
für Programme. :wink:

Für Windows gäbs übrigends noch "Pipes" als alternative :mrgreen:
Die kennen auch den Nachrichten Modus, wodurch der Datenfluss dort kein
Stream wäre :wink:
Pipes gibs sicher auch auf Linux, kenn ich mich aber nicht mit aus.

Für dein Problem denk ich aber mal, das stdin/ -out am besten geeignet
sind. Dein Protokoll würde auch sicher nix kompliziertes werden, schließlich
brauchst ja nur was wie "suche nach Autor xyz" und dann das Format,
wie die Antwort aussehen soll.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

OK, dann kein Clipboard.

Dann geh ich den Weg über ein echtes Preference file, beziehe das in mein Konzept ein und nutze es noch für andere Zwecke.
Der Vorteil wäre dann auch, daß die "Form" des Plugins egal ist, Hauptsache es kann zwei Strings entgegennehmen und ein File schreiben.

Ach wenn es doch sowas schönes wie den guten, alten ARexx-Port auch außerhalb AOS geben würde :lol:

bis denne...
scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@scholly: ähm, was war jetzt nochmal der Grund, warum Du keine DLL
verwenden willst?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Kiffi hat geschrieben:ähm, was war jetzt nochmal der Grund, warum Du keine DLL verwenden willst?
Wo hab ich das geschrieben?
Ich werde versuchen, auch die Nutzung von DLLs als "PlugIn" zu ermöglichen.

Vielleicht habe ich mein Ziel nicht verständlich genug artikuliert:

Meine Video-DB speichert Infos zu archivierten Filmen:
- technische Infos (Medium-Typ, Codec(s), Bitrate(n), Auflösung, etc. pp)
- Meta-Infos (Titel, Serie, Universum, Genre, Typ, Quelle, Qualität, Regiseur, Artist, etc. pp)

Die Technischen Infos hol ich automatisch aus dem File.
Meta-Infos hole ich, soweit schon vorhanden, aus den Tags.

Fehlende Meta-Infos kann man eingeben.

Es gibt ein Programm (GCStar), das Plugins in PERL benutzt, um Movie-Sites wie IMDB und AllMivie abzuklappern und von dort weitere Meta-Infos zu besorgen.

Ich will solche Plugins weder schreiben noch mitliefern.
Ich will aber die Möglichkeit bieten, daß jemand, der Bock darauf hat, sich so ein Plugin zu basteln, die von diesem Plugin ersammelten Daten direkt in meine Eingabemaske übernehmen kann.
Wie so ein Plugin aussieht, soll mir egal sein - deswegen werde ich versuchen, so wenig Beschränkungen wie möglich einzubauen, Hauptsache es kann zwei Strings entgegennehmen und ein File mit festgelegtem Aufbau schreiben.

Besser erklärt?

bis denne...
scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Also Dateien sind nicht für die Echtzeitkommunikation geeignet. Wenn du
wirklich eine verünftige Schnittstelle haben möchtest, sind DLL oder stdin/
out nötig. Und die Schnittstelle muss ja vermutlich garnicht so komplex
sein. Du könntest eine Prozedur nehmen, der du die zwei Strings übergibst
und welche dann das Suchen startet. Eine 2. Prozedur gibt den Status der
Suche zurück und eine weitere (oder mehrere) sind dann dafür zuständig,
dass Ergebnis der Suche zurück zu liefern.

Bei der Konsole sagst einfach, dass deine Applikation immer Befehle in der
Form <Befehl> "<Parameter1>" "<Parameter2>" sendest und als Rückgabe
machst ähnliche vorgaben.

:D

Ach ja ... du müsstest solche Vorgaben auch bei einer Datei machen. Dein
Programm muss ja schließlich wissen, welche Daten es bekommt.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten