kuehnch Posted November 7, 2006 Share Posted November 7, 2006 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. Quote Link to comment
dharry Posted June 13, 2007 Share Posted June 13, 2007 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. Quote Link to comment
Moses Posted June 13, 2007 Share Posted June 13, 2007 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".. Quote Link to comment
Hartwig Posted June 13, 2007 Share Posted June 13, 2007 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. 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.... Quote Link to comment
JMS Posted June 14, 2007 Share Posted June 14, 2007 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 Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.