Jump to content

Pluginerstellung in .NET


kuehnch

Recommended Posts

Hallo,

ich möchte gerne ein Plugin für DVBViewer entwickeln und dabei auf C# zurückgreifen. Nun sehe ich scheinbar den Wald vor lauter Bäumen nicht und finde leider auch nur Delphi-Codebeispiele. Wann genau ruft DVBViewer welche Methode eines Plugins (einer DLL) zur Initialisierung auf? Ich habe auch keine Schnittstelle gefunden, welche ich implementieren müsste. Ein externes Programm, welches auf DVBViewer zugreift ist nicht das Problem.

Meiner Ansicht sollte sich das ja wie folgt darstellen:

 

1. Starten eines Klassenbibliotheksprojekts

2. Hinzufügen einer Klasse, welche ein Interface implementiert, das die Methoden beschreibt, welche seitens DVBViewer während der Laufzeit aufgerufen werden (z.B. Init() oder Close())

3. Definition der implementierten Methoden

 

Eine Klassenbibliothek besitzt ja prinzipiell auch keine Main-Methode oder sowas.

Habe das Projekt so konfiguriert, dass die DLL direkt in das Plugins-Verzeichnis geschmissen wird, bevor dann der DVBViewer gestartet wird. Leider greift halt keiner meiner Debug-Punkte.

Link to comment
  • 7 months later...

Hallo,

 

fallst du es nicht aufgegeben hast und doch irgendeinen Erfolg mitlerweile hattest wäre es nett wenn du mir eine kliene Starthilfe geben könntest, weil ich möchte auch Plugins in C# schreiben. Kann es sein dass es nicht mit .Net dll geht, sondern nur mit dlls "aus der alten COM Welt"?. Ich habe mal gehört, dass man wohl irgendwie mit ein paar Zeilen C einen Wrapper bauen kann.

Link to comment

Es gibt einen Unterschied zwischen der COM Schnitstelle und der Plugin Schnittstelle...

Auf COM kann jedes Programm zugreifen, auch vbs scripte usw...

 

die Plugins müssen als dll im Plugins Ordner liegen. Wie das Interface dazu aussieht, wird im "SDK" (ziemliches schmalspur SDK *g*) erklärt. In einem der beiden (es gibt zwei, eins ist öffentlich und eins gibts im Mitgliederbereich!) gibt es auch Source Codes von ein paar Beispielen (die leider nicht mehr 100%ig aktuell sind). Wenn du mit C# und dem .Net Framework eine normale Windows DLL bauen kannst, sollte der DVBViewer in der Lage sein die auch zu laden und zu verwenden.

 

Achja: es ist nicht unbedingt nett das auf Deutsch im Englischen Forum zu posten / fragen... gilt aber wohl am ehesten für "kuehnch"..

Link to comment

ich denke, daß es möglich ist. Allerdings kenne ich mich mit C# nicht aus. ich habe es allerdings vor einiger zeit mal mit J# versucht. Doch leider hat das nicht geklappt. Warscheinlich wohl, weil ich etwas falsch gemacht habe. Es gab leider auch überhaupt keine Beispiele, wie so etwas in J# auszusehen hat. Selbst die MSDN Library als Hilfe für Visual Studio konnte mir nicht die gesuchten infos bieten. Eine DLL wird aber auf jeden Fall erstellt.

 

Wenn du aber weißt, wie es geht, dann solltest du mal einen Blick ins SDK werfen. Dort findest du die "Standard Plugin Routines". Diese müssen auf jeden Fall vorhanden sein.

 

In Delphi sieht das ganze dann in etwa so aus:

library test;

uses
 SysUtils, Classes, Windows;


function Version:Pchar;stdcall;
begin
result:='1.0.0';  
end;

function Copyright:PChar;stdcall;
begin
result:='MeinName';
end;

function LibTyp:PChar;stdcall;
begin
result:='Plugin';
end;

function PluginName:PChar;stdcall;
begin
result:='Test';
end;

exports PluginName;
exports Version;
exports Copyright;
exports LibTyp;

begin
	// Hier kommt der Code rein, 
	// der automatisch ausgeführt werden soll 
 Beep;
end.

 

 

Das wäre dann z.B. ein Plugin, welches nur einen Ton von sich gibt, wenn es gestartet wird. :bounce:

Wie es mit den "exports" unter C# aussieht, weiß ich nicht. Vielleicht reicht ja schon ein public static.

 

Wennd u jetzt mal ins SDK guckst, dann findest du zu jeden Teil einen Zweizeiler:

 

Function Copyright:Pchar;stdcall;

char __stdcall *Copyright()

 

Das 2. sieht nach C aus. Vielleicht läßt sich ja damit etwas anfangen....

Link to comment

Leider ist es nicht ganz so einfach, da C# / .NET keine DLLS mit Windows API EXPORTs erzuegen kann. Man braucht in der Tat irgendeine Form von Wrapper, e.g. in C++. Ich habe vor langer Zeit so was mal für Watch TV Pro gemacht: es geht, ist aber zum Teil mühsam. Aber wenn man sich etwas Mühe gibt, kommt auch etwas Anständiges heraus, auf dem man aufbauen kann - e.g. der Nutzer / Entwickler braucht sich nicht mehr um all das zu kümmern, sonder schreibt rein in C# / .NET. Es ist allerdings immer die Frage des Aufwands: wieviele PlugIns werden gemacht, wieviele davon in .NET und lohnt der Aufwand für ein ordentliches Framework. Dazu kommen noch einige ekelige Tricksereien bei Methoden, die so was wie eine char * Konstante zurückliefern (Stichworte: Garbage Collection, Memory Move und Pinning). Aber ich bin überzeugt, dass es gehen würde...

 

Jochen

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