Jump to content

.Net API


dharry

Recommended Posts

Hallo,

 

ich würde gerne Plugins für DVBViewer in .Net schreiben und zwar nicht nur welche die DVBViewer auslesen sondern auch wirklich erweitern und integrieren (über das Menü).

Dazu wäre ein .Net API nicht schlecht. Ich würde mich auch bei der Arbeit an einer solchen API beteiligen, leider sind meine C bzw. C++ Kenntnisse begrenzt, habe mich aber schon etwas über den Aufruf von ManagedDLLs aus Unmangagedprogrammen informiert. Habe versucht ein kleines Plugin in C++ zu schreiben hatte aber bisher keinen Erfolg. Wenn es noch mehr Leute gibt die an so was interessiert sind und evtl. auch helfen wollen bitte melden.

 

Noch ein paar Suchwörter da .Net zu kurz ist:

 

DotNet, Csharp, NetAPI

Link to comment

Ein paar kurze Gedanken dazu:

 

Universell wäre die folgende Methode:

Eine Adapter-DLL die folgendes macht/bereitstellt:

- Laden einer bestimmten assembly (wie auch immer).

- diverse exports, die erlauben für die einzelnern API-Funktionen einen Callback zu setzen.

 

Der Ablauf wäre folgender:

Die DLL lädt die Assembly.

Die assembly importiert die exportierten DLL funktionen

Die Assembly übergibt über die DLL funktionen die Callbacks an die DLL (via delegates (?)).

Die dll leitet die aufrufe der API durch.

 

Als zusatzbonbon könnte man die IDVBViewer Schnittstelle an die Assembly mit übergeben und die könnte dort benutzt werden.

 

Exports & Co sind keine Probleme so eine DLL könnte ich bereitstellen. Was ich nicht weiss, wie lädt man gezielt eine Assembly? per COM? oder muss man die CLR starten und den ganzen mumpitz drumherum?

 

Ein anderer weg wäre die assembly als COM-Bibliothek auszulegen.

Man generiert ein DVBViewer Plugin Interface, dass in die Assembly importiert und implementiert wird.

Die DLL bekommt dann die ClassID und erzeugt somit eine Instanz der Bibliothek. Denkbar wäre auch der Weg über den StdComponentCategoryMgr, daß nutze ich zum beispiel für die Plugins des Recordingservice...

Link to comment

Wie in einem anderen Thread von vor ein paar Tagen schon mal kommentiert, habe ich das Problem mit Runtime und Assembly und Wrapper und und und schon mal vor laaanger Zeit (inzwischen gibt es ein internes Update für Visual Studio 2005) für ein anderes Produkt gemacht, das sollte hier genauso gehen.

 

Wenn es aber über COM InterOp ging, wäre das technisch sehr viel einfacher. Die volle Lösung ist wesentlich komplexer, hätte aber (wie im Beispiel) eventuell den Vorteil, dass man eine vernünftige .NET PlugIn Basisklasse anbieten könnte, die alle InterOp Geschichten (COM, SendMessage, export, ...) elegant verbirgt. Der Nachteil der COM Lösung ist das elendige Marshal.ReleaseComObject, bei dessen Auslassen man die eigenartigsten Effekte bekommen kann.

 

Jochen

 

<Zusatz>Direkter Download zu dem Framework mit C++ Wrapper et al.</Zusatz>

Edited by JMS
Link to comment

Wie man ein .Net-Assambly aufrufen kann ist hier beschreiben: CodeProject

 

Das ist denke ich relativ simpel, so lang man mit einfachen Datentypen arbeitet, wie und ob es mit komplexen Objecten in der Schnittstelle funktioniert wird sich zeigen. Das würde bedeuten mann müsste "nur" jede Mehtode und jeden Export (einfache Methoden mit Returning Paramerter oder?) deklarieren und durchreichen. Wenn jemand Lust und Zeit hat kann er ja mal in C++ oder so die grundsätzlich nötigen Exports und Methoden Deklarieren und ich versuch dann mal Rückgabewerte aus C# zu bekommen.

Link to comment
  • 2 months later...

Wenn mir jemand mal beispielshaft ein .Net-Wrapper Plugin schreiben würde (nur die Standartplugin routienen oder so) dann würde ich das Plugin ausbauen. Wäre toll wenn sich jemand melden würde.

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