LabVIEWForum.de
[gelöst] Dynamische Vererbung über die Grenzen von Klassen hinweg - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: LVOOP (/Forum-LVOOP)
+---- Thema: [gelöst] Dynamische Vererbung über die Grenzen von Klassen hinweg (/Thread-geloest-Dynamische-Vererbung-ueber-die-Grenzen-von-Klassen-hinweg)



[gelöst] Dynamische Vererbung über die Grenzen von Klassen hinweg - davidwm - 03.05.2011 13:09

Hallo zusammen,

ich arbeite gerade an einem Programm, dass dynamisch Plugins laden können soll.

Ich habe eine Oberklasse Module, die von einzelnen Plugins realisiert wird und ich kann die einzelnen Funktionalitäten der Module über die Schnittstelle Module umsetzen. Nun möchte ich die einzelnen Plugins mit allen VIs und Unterklassen in eine Library packen und dann dynamisch in mein Hauptprogramm laden. Beim Kasten des Objektes "LV Objekt" der Funktion "LV-Klasse dynamisch erstellen" bekomme ich aber Fehler. Insbesondere dann, wenn ich versuche das Plugin in eine Klasse des Types *.lvlibp zu exportieren und dann in meine Hauptanwendung zu importieren. Den Fehler bekomme ich, obwohl die identischen Klassen aus dem Hauptprogramm zur Generierung der Lib verwendet werden.

Im Attachment habe ich mal angefügt, wie ich das probiert habe, dann wird es vielleicht ein wenig klarer.

Da ist natürlich auch noch ziemlich viel Mist drin. Die Lib und die Hauptanwendung werden aus dem gleichen Projekt erzeugt.

LG
David


RE: Dynamische Vererbung über die Grenzen von Klassen hinweg - oenk - 03.05.2011 13:32

Schau mal hier bei Tomi Maila's blog, vielleicht hilft dir das weiter. Dort beschreibt er genau wie man Plugins dynamisch laden kann.
Sein Beispiel ist sehr hilfreich. Ich lade genau so meine Plugins und das funktioniert einwandfrei!

Ich hab jedoch meine Plugins aus dem Projekt entfernt, da sie sonst noch Abhängigkeiten erzeugt/erzeugen kann.
Mein physikalischer Projekt Ordner beinhaltet alle Unterordner und mehrere *.lvproj Dateien. Eine für das Hauptprojekt, welches ausführbar ist (Main.vi) und n-Plugin-Projekte. Somit sind keine Abhängigkeiten zu den Plugins im Main vorhanden, welche uU Probleme erzeugen können (hauptsächlich wenn du zur Laufzeit verschiedene .NET assemblies laden möchtest, dann sind diese Abhängigkeiten tödlich...)

(btw: es ist hilfreich, wenn du einen bereinigten Screenshot hochstellst, dann kann man sich auf's Wesentliche konzentrieren)


RE: Dynamische Vererbung über die Grenzen von Klassen hinweg - davidwm - 03.05.2011 14:40

Danke,

Die Seite hatte ich auch schon gesehen und mich daran orientiert, aber das hat das Problem nicht gelöst.

Die 2 wesentlichen Unterschiede sind:
Ich wollte mit lvlibp arbeiten und nicht mit LLB
Ich habe alles in einem Projekt, vielleicht muss ich da noch mal was rausschmeißen, damit das etwas sauberer wird.

Ich gucke morgen noch mal etwas genauer, jetzt gibt es erstmal Feierabend. Smile

Danke schon mal, ich werde eventuell noch weitere Fragen stellen, wenn ich diese Hilfestellung ausgestestet habe.

LG
David


RE: Dynamische Vererbung über die Grenzen von Klassen hinweg - davidwm - 04.05.2011 12:25

Hallo,

so ich habe noch mal ein wenig weiter getestet: Hier das Ergebnis:

Die folgenden Popups ergeben sich aus dem Aufruf unten
[attachment=33641]

[attachment=33642]

Ich habe jetzt auch die Bibliothek, die ich hier einfüge aus dem Hauptprojekt gelöscht und ein weiteres Projekt erstellt, dass NUR die eingebundene Bibliothek und die davon abhängige Bibliothek mit der Basisklasse enthält.

Ich bekomme, wie ihr sehen könnt immer noch einen Fehler.

Vielen Dank!
David


RE: Dynamische Vererbung über die Grenzen von Klassen hinweg - oenk - 04.05.2011 12:51

Hi David

kannst du mal ein Funktionsmuster von deinem Problem erstellen? Dann kann man mal damit rumspielen und sehen wie das ganze aufgebaut ist.
Oftmals hilft das einem auch selbst, da man sich dann wirklich nur auf das aktuelle Problem konzentriert.
Am Besten genau so wie dein Program aufgebaut ist, nur mit Dummy Modulen & Plugins.


RE: Dynamische Vererbung über die Grenzen von Klassen hinweg - davidwm - 04.05.2011 14:05

Hallo noch mal,

so, ich habe nun einen weiteren Schritt unternommen und das ganze noch mal geprüft. Dabei habe ich die Lösung für das Problem gefunden.
Ich hänge mal meinen Testcase an, damit andere Leute mit dem gleichen Problem das ganze nachvollziehen können. Sorry ich habe es mit LV2010SP1 erstellt.

Problem:
Fehler beim "Typecasten" eines dynamisch erstellten LV-Objektes. Fehler 1448, siehe oben. Das ganze beim nutzen von Libp-Bibliotheken (LLBs sind weniger problematisch).

Lösung:
Bibliotheken KOMPLETT voneinander trennen, sodass es mindestens 3 Projekte gibt:
1. Lib1 (mit der Schnittstelle "ParentClass.lvclass")
--> KEINE externen Libs
2. Lib2 (mit der Implementierung der Schnittstelle "ChildClass.lvclass")
--> Externe Lib (im Projektbrowser): Endprodukt der Lib1 (hier also "Lib1.lvlibp") --> Klasse daraus als Parent-Object wählen.
3. Prog (mit dem späteren Programm)
--> Externe Lib (im Projektbrowser): Endprodukt der Lib1 (hier also "Lib1.lvlibp")
Nun kann in diesem Projekt die Klasse "ChildClass.lvclass" dynamisch erstellt werden und sowohl Lib1 als auch Lib2-Funktionen verwenden.

Ist ein wenig umständlich, aber so geht es.

Im Falle der LLBs geht es auch einfacher, aber ich wollte es hier gerne mit der lvlibp lösen.

Danke an <<oenk>>.

Gruß
David