(04.07.2013 07:30 )mikano schrieb: Hallo miteinander!
Ich versuche gerade eine generische Klasse in meiner DLL aufzurufen. Die Schwierigkeit eine statische Klasse aufzurufen habe ich bereits überwunden, dies sollte schon funktionieren, das Problem ist jetzt aber das der Konstruktor drei unterschiedliche Werte annehmen muss (d.h. 2 Enum und 1 Integer Parameter), d.h. es gibt kein leeren Konstruktor (im Sinne von keine Attribute)
Hat jemand eine Idee, wie ich ein "Cluster-Array" in ein 1d .NET Array umwandeln kann?
Übergeben wird das Array an die .NET Klasse Activator via CreateInstance mit dem type und die args als object[].
Danke und Beste Grüsse,
mikano
Wenn Du mit Generische Klasse eine Klasse meinst die Generic ist dann kannst Du die LabVIEW .Net Nodes nicht verwenden. LabVIEW bietet keine Möglichkeit, die Create Instance Node weiter zu konfigurieren. Entweder bietet die Klassebeschreibung alle Informationen die LabVIEW benötigt, um Sie zu instantieren oder es geht gar nicht. Bei Generics ist das aber nicht gegeben. Dort wird der interne Datentyp der Klasse erst zur Linkzeit bestimmt durch den Programmierer. Um Generics möglich zu machen müsste LabVIEW in der Create Instance Node eine weitere Konfiguration möglich machen, wo Du den Datentyp konfigurieren kannst. Das auf eine sinnvolle Weise zu implementieren ohne den Benützer mit auführlichen .Net Details zu erschlagen, die er alle korrekt angeben müsste, ist fast unmöglich und wurde deshalb nicht gemacht.
Es gibt zwei Lösungen hierzu:
1) Man schreibe einen Wrapper in .Net der explicite Datentypen verwendet und die generieke Klasse dann aufruft. Das kann LabVIEW instantieren, solange man Sorge trägt, dass keine Methode wiederum generieke Objekte als Parameter verlangt. Intern dürfen die Wrapper aber nach Belieben mit generiken Datetetypen arbeiten.
2) Mittels Reflection kann man die Limitation in LabVIEW umgehen. Das funktioniert zwar, ist aber wirklich kein zuckerschlecken, weil sehr kompliziert, kostet ziemlich viel Performance da man alles durch mehrer Lagen von .Net Reflektion schicken muss und hat eine deutlich höhere Chance bei einem Upgrade zu einer neuen .Net Version wegen irgendwas zu hakeln.
Die Implementation mittels Reflection gibt ein wenig wieder was man alles wissen müsste um eine Konfiguration von Generics in LabVIEWs Create Instance möglich zu machen.
Wenn Du etwas anderes meinst, dann erkläre Dich bitte etwas genauer.