rocket Posted November 17, 2005 Posted November 17, 2005 Servus! Ich kann über die COM von extern Ereignisse von DVBViewer bekommen und diesen steuern. Soweit so gut... Am liebsten wäre es mir aber wenn dieses externe Object wie ein Plugin in DVBViewer geladen wird und trotzdem die COM Funktionen benutzt. Nach längerem suchen hab ich kein "Rezept" gefunden, ich hab mir gedacht ich mach eine Library die einfach das COM nutzt und geb sie dem DVBViewer ins Plugins Verzeichnis... Klar geht das nicht, muss ich dazu die Standardroutinen eines DVBViewer Plugins implementieren? Und wie mach ich das wenn ich nicht Delphi coden will? Andere Frage: Kann ich über die COM Schnittstelle Plugins laden/entladen? MfG Sebastian Quote
Guest Lars_MQ Posted November 17, 2005 Posted November 17, 2005 Also als Plugin und COM ist das kein problem ich nutze das ständig. Mit welcher Sprache willst Du das denn machen? Du musst in der lage sein, "echte" dlls zu erzeugen. Und nein, Plugins können nicht dynamisch ge-/entladen werden (zumindest von extern). Quote
rocket Posted November 17, 2005 Author Posted November 17, 2005 Hmmm... "echte" dlls... ich will c# coden (.net), Com Funktionalität hab ich damit schon benutzt aber vielleicht kannst Du mir erklären was eine "echte" dll ist. Muss ich die Standard Plugin Methoden implementieren? Ist das laden/entladen von Plugins Programmtechnisch überhaupt möglich oder ist das nur eine nicht in die COM eingebundene Funktion? Quote
Griga Posted November 17, 2005 Posted November 17, 2005 Ist das laden/entladen von Plugins Programmtechnisch überhaupt möglich Klar, mit FreeLibrary. Bleibt aber dem DVBViewer als Verwaltungsinstanz vorbehalten. Da könnte ja sonst jeder kommen und mal eben ein Plugin entladen, auf das der DVBViewer noch zugreift. Gäbe ein paar hübsche AVs... Quote
rocket Posted November 18, 2005 Author Posted November 18, 2005 Hehe... klar würde das zu leichten Komplikationen führen wenn ich einfach ein benutztes Plugin rausschmeissen würde... Wenns im DVBViewer nicht abgefangen wird... Ok, diese Frage ist damit beantwortet Wie war das nochmal mit ECHTEN dlls? Egal ich probier mal ein bisschen rum, danke für die Infos. Quote
rocket Posted November 19, 2005 Author Posted November 19, 2005 Ich hab erstmal versucht eine Plugin Library zu schreiben indem ich die StandardMethoden implementiert habe. Die kann ich jetzt zum Beispiel in eine anderes C# Applikation einbinden, aber den DVBViewer interessierts nicht wirklich :S Hat jemand eine Ahnung wie man das mit .NET anstellt? Andere Frage (bisschen OT): Ich hab versucht den DVBViewer über die COM (.Quit() bzw. SendMessage(...)) zu schließen, aber es ist immer ein Thread zurückgeblieben den ich nurnoch über den Taskmanager abschießen konnte. Jemad eine Idee was ich falsch mache? Quote
Guest Lars_MQ Posted November 20, 2005 Posted November 20, 2005 So jetzt nochmal fix was zu diesem Thema. "Echte" Dll sind Win32 dlls Die kann C# nicht. Aber ich habe eine Lösung gefunden, um VB (das auch keine echten Dll kann) und die Net kiste zumindest in den DVBViewer plugin-lade-prozess mit einzufügen. Das bedeutet: Die COM-dlls werden bei einem Plguin angemeldet, das dann die in der dll enthaltene Klasse instanziert und damit ausführt. Die Dll wird die gesamte Laufzeit des DVBViewers "am Leben" gehalten und erst wenn der DVBViewer beendet wird freigegeben. Das ganze klingt komplizierter als es ist Die COM Dll (bzw die klasse) muss zwei methoden zur Verfügung stellen: Init und Quit. Diese Methoden werden aufgerufen, sobald der DVBViewier initialisiert bzw beendet wird. Für die Net geschichten gilt: die dll muss als COM dll (also mit wrapper) erzeugt werden, um zwischen managed und unmanaged code zu vermitteln. Dazu gibt es (wie eine kurze google suche zeigte) unmengen an anleitungen und es scheint auch nicht besonders schwierig zu sein. Das einzige was jetzt noch fehlt ist eine [PluginName].plugin datei, die im DVBViewer Pluginverzeichniss abgelegt werden muss. In dieser Datei muss und darf nur eine Text-Zeile stehen: [Library].[Klassenname] Beim DVBViewer wäre das zum Beispiel: DVBViewerServer.DVBViewer In der angehängten datei befindet sich das adapter plugin, das gehört ins DVBViewer Plugins verzeichniss, eine Beispiel .plugin Datei und ein Beispiel COM Plugin in vbscript. Das Beispiel Plugin muss (COM) registriert werden (Rechtsklick im explorer und registrieren wählen), es macht aber wirklich nichts anderes, als das es sich laden lässt. Dieses Plugin läuft nur mit DVBViewer Pro 3.2.x und ist für den normalen Anwender völlig ohne Bedeutung und Nutzen, das ist nur für Entwickler interessant. Viel Spass Lars PS: Wenn es jemanden gibt, der weiss, wie man im wsc die Eventsink für die Events des DVBViewer COM-objects einbaut, der möge das mir bitte mal erklären, ich habe es nicht hinbekommen Quote
rocket Posted November 20, 2005 Author Posted November 20, 2005 Hey, danke! Das werde ich gleich mal ausprobieren... Quote
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.