Jump to content

MyPrograms Plugin


hackbart

Recommended Posts

Okay, since the myinternet plugin did not found persons interested in updating the code i decided to finish the second example.

 

This plugin shows how to:

1. Load a XML Page

2. Hooks into the Options Dialog

3. Deals with Lists and Thumbnails.

 

The idea is to offer a simple way to add own applications into the osd. The only thing which is missing are the functions behind the OSD Green/Yellow/Red/Blue Button - especially since i have no idea what to implement behind :)

 

Since i use a few newer features of the COM interface, please use it only with the current beta version.

 

Christian

PS: This time i also added a binary - in order to avoid the problems with missing classes

myprograms.zip

Link to comment
  • 2 weeks later...

Hello,

 

If i click the MyPrograms Entry in the Options Dialog the program close its self everytime. Have someone an idea whats wrong?

Sorry for my bad english. :bounce:

Link to comment
  • 3 weeks later...
  • 1 year later...

Ich habe das Plugin gerade im Test und habe zwei Probleme, bzw. Fragen:

 

1. Die Reaktionszeit auf Tastendrücke (von Listeintrag zu Listeintrag) liegt bei mir bei ca. 2 Sekunden - ist das normal?

2. Nach dem Aufruf eines Programms wird im DVBViewer kein TV-Programm mehr angezeigt, ich muss erst wieder einen Sender wählen. Gibt es eine Möglichkeit, dass der letzte Sender wieder angezeigt wird?

Link to comment
  • 3 weeks later...

@ZappoB,

 

hast Du den plugin selber nochmal übersetzt?

Wenn ja, mit welchen Dev-Tool?

 

Ich habe gerade das Problem, dass bei mir nie das InitPlugin2 angesprungen wird.

 

Gruss,

klaus.

Link to comment
  • 9 months later...

muss das Thema nochmal rausholen....und zwar habe ich bei mir auch das Problem, dass ich nachdem schließen des geöffneten Programms, den zuvor eingestellten TV Sender neu einstellen muss. Gibt es hierfür shcon eine Lösung? Ansonsten ist das PlugIn echt super!!!

Link to comment
  • 6 months later...

hallo,

 

wie & wo muss ich etwas ändern, um im osd menü den eintrag "myprograms" zu ändern, z.b. in music videos ! also ein reines umbenennen !

 

danke & gruss

Link to comment

Plugins in DVBViewer – Eine erste Analyse

 

Ich schau grade, dass ich irgendwie verstehe, wie Plugins in DVBViewer funktionieren. Ich habe momentan folgende Ressourcen:

 

* Die COM-Dokumentation (CHM-Datei, Version 1.3, veraltet)

* Die SDK-Dokumentation (CHM-Datei, enthält außer Funktionssignaturen fast keine Informationen)

* Das Beispiel-Plugin MyPrograms

 

Viel mehr gibt es vermutlich auch nicht, so dass ich mit dem zurecht kommen muss.

 

Die COM-Doku ist glaube ich weniger nützlich zur Plugin-Entwicklung.

 

Die SDK-Doku nennt eine handvoll Funktionssignaturen, die ein Plugin bestimmten Typs wohl veröffentlichen muss. Da diese Datei keinerlei Architekturinformationen enthält, rate ich einfach mal, dass ein Plugin eine DLL ist, die die benannten Funktionen exportieren muss. Die DLL wird dann von DVBViewer geladen (LoadLibrary) und die Funktionen werden aufgerufen (GetProcAddress). Wo hier der eigentliche Plugin-Code versteckt ist, geht aus der Beschreibung nicht hervor.

 

Das MyPrograms-Plugin exportiert ein paar der in der SDK-Doku benannten Funktionen. Zusätzlich exportiert es eine undokumentierte Funktion "InitPlugin2 : IDVBViewerPlugin", die die Variable "myplug" zurückgibt, deren Definition ich nicht finden konnte. Ist die undefinierte Methode "Create" der Konstruktor eines Typs? Ich kenne mich mit den Erweiterungen von Delphi gegenüber Pascal nicht aus und habe auch keinen Compiler, um es auszuprobieren. Die Sprache ist mir irgendwie suspekt, sieht nicht sehr objektorientiert aus, erinnert alles an die records aus prozedural organisiertem Pascal. Ach ja, Groß-/Kleinschreibung wird in Delphi auch nicht beachtet, oder?

 

Ansonsten hat DVBViewer jetzt vermutlich zu einem bestimmten Zeitpunkt eine Instanz des im Plugin definierten Typs TBasePlugin, der durch eine Vererbungshierarchie letztlich von TBaseDVBViewerPlugin ableitet. Diese Klasse bietet u. a. die Methode QueryInterface an, die die nicht definierte Funktion GetInterface aufruft und deren Rückgabewert weiterreicht. Es sind in MyPrograms etliche Schnittstellen definiert, zu denen auch eine GUID angegeben ist. Die GUIDs sind nicht in der Windows-Registry zu finden. Vermutlich sind dieselben Schnittstellen auch im DVBViewer definiert, so dass der gezielt Schnittstellen vom Plugin abfragen kann. Das sieht alles sehr nach COM aus, als wäre ein Plugin eigentlich eine COM-Klasse, die einige (DVBViewer bekannte) Schnittstellen implementiert, deren Methoden zu bestimmten Anlässen aufgerufen werden. Ist es nun tatsächlich COM-basiert oder sieht das nur so aus, ist nicht binärkompatibel und kann ich die üblichen COM-Mechanismen, die auch von anderen Programmiersprachen bereitgestellt werden, hier komplett vergessen?

 

Ich habe mal ansatzweise ein paar der Schnittstellen in C# übersetzt und eine Basisklasse entworfen, die ein paar Schnittstellen implementiert. Momentan fehlen noch die von der DLL zu exportierenden Funktionen. Aber mal angenommen, es ist COM, was passiert eigentlich, wenn die Schnittstellen falsch übersetzt wurden? Bekomme ich eine hübsche Fehlermeldung mit Stacktrace und Begründung? Oder springt mir DVBViewer dann bei einem Methodenaufruf auch einfach nur in Einzelteilen entgegen?

Link to comment
  • 2 weeks later...
If i click the MyPrograms Entry in the Options Dialog the program close its self everytime. Have someone an idea whats wrong?

Interesting. Now that I've come to the point that I can add options categories in my own plug-in, too, I see the very same behaviour. The programme crashes immediately when the user clicks on that category. There seems to be system behind it. But sorry, I haven't found a solution to it either. Maybe it's DVBViewer that's broken here.

Link to comment
Now that I've come to the point that I can add options categories in my own plug-in, too, I see the very same behaviour. The programme crashes immediately when the user clicks on that category. There seems to be system behind it.

 

Did you create the options form?

You can find it in the myprograms example in the on show function

 

function TBasePlugin.Show(const strModuleName: WideString; aParent: longword):
 HRESULT;
begin
 if strModuleName = OPT_NAME then
 begin
if not assigned(frmOptions) then
begin
  frmOptions := TfrmOptions.Create(nil);
  frmOptions.OnEvent := Onchanged;
  loaddata(strmodulename);
end;
frmOptions.ParentWindow := aparent;
frmOptions.Align := alclient;
frmOptions.Show;
 end;
 result := S_OK;
end;

Link to comment
  • 1 year later...

Hallöchen,

ist ja schon etwas älter hier, ich versuch es trotzdem.

 

Also wenn ich die im Archiv enthaltene DLL ins PlugIn- Verzeichnis kopieren funktioniert das einigermaße. Wenn ich das selbst kompeliere und ins Verzeichnis kopiere geht gar nichts - kein 'MyPrograms'- Eintrag im Menü und auch nichts mehr in den Optionen zu sehen.

 

Erstellt habe ich die DLL mit Delphi XE, habe keine Änderungen vorgenommen. Muss man da irgend wo was eintragen/ändern. Ich habe einfach das Projekt geladen und per strg F9 kompeliert...

 

Gruß

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...