Jump to content
Sign in to follow this  
hackbart

MyPrograms Plugin

Recommended Posts

hackbart

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

Share this post


Link to post
Tjod

How I have to wright the applications in the myprograms.ini?

Share this post


Link to post
Lars_MQ

Take a look at the DVBViewer Options dialog. It should be the very last entry.

Share this post


Link to post
Tjod

:) Thanks i did not know way did not found it.

2. Hooks into the Options Dialog

Share this post


Link to post
dharry

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:

Share this post


Link to post
klausb

Is there any free Delphi IDE/Compiler available?

I know CodeGear, but that's not free.

 

Regards,

klaus.

Share this post


Link to post
ZappoB

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?

Share this post


Link to post
klausb

@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.

Share this post


Link to post
ZappoB

Ich verwende das fertig übersetzte Plugin.

Share this post


Link to post
DerThommy

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!!!

Share this post


Link to post
EdVonSchleck

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

Share this post


Link to post
LonelyPixel

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?

Share this post


Link to post
LonelyPixel
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.

Share this post


Link to post
amontillado
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;

Share this post


Link to post
strgalt

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ß

Share this post


Link to post
strgalt

ich sehe gerade auch, dass meine DLL 1,01 MB groß ist, die original DLL ist 212 KB.. ?

Share this post


Link to post

Join the conversation

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

Guest
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.

Sign in to follow this  

×
×
  • Create New...