INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

.NET Generics via LabView



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

04.07.2013, 07:30
Beitrag #1

mikano Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Jul 2013

2010
2013
EN



.NET Generics via LabView
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.07.2013, 08:11 (Dieser Beitrag wurde zuletzt bearbeitet: 04.07.2013 08:15 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: .NET Generics via LabView
(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.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.07.2013, 08:24
Beitrag #3

mikano Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Jul 2013

2010
2013
EN



RE: .NET Generics via LabView
Hallo rolfk,

danke für die rasche Antwort. Ja mit "Generische Klasse" waren Generics gemeint (public class ReadOnlyArray<T>...).

Anbei meine bisherige Lösung, wie du siehst über Reflection. Das einzige Problem was auf den ersten Blick noch zu existieren scheint ist eben, wie ich an "args" ein .NET Array übergeben kann, welches ich in LabView befüllen kann.
Gibt es hierzu eine Möglichkeit? z.B. über Build Array oder ähnliches?

Sonst werde ich es doch über eine Wrapper lösen.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.07.2013, 09:32
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: .NET Generics via LabView
(04.07.2013 08:24 )mikano schrieb:  Hallo rolfk,

danke für die rasche Antwort. Ja mit "Generische Klasse" waren Generics gemeint (public class ReadOnlyArray<T>...).

Anbei meine bisherige Lösung, wie du siehst über Reflection. Das einzige Problem was auf den ersten Blick noch zu existieren scheint ist eben, wie ich an "args" ein .NET Array übergeben kann, welches ich in LabView befüllen kann.
Gibt es hierzu eine Möglichkeit? z.B. über Build Array oder ähnliches?

Sonst werde ich es doch über eine Wrapper lösen.

Hast Du es schon mal mit "To .Net Object.vi" in der .Net palette versucht?

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.07.2013, 10:21
Beitrag #5

mikano Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Jul 2013

2010
2013
EN



RE: .NET Generics via LabView
Ja das habe ich auch bereits versucht, das liefert mir aber ein einzelnes .net Objekt, der Parameter erwartet aber ein eindimensionales Array aus .net Objekten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.07.2013, 12:25
Beitrag #6

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: .NET Generics via LabView
(04.07.2013 10:21 )mikano schrieb:  Ja das habe ich auch bereits versucht, das liefert mir aber ein einzelnes .net Objekt, der Parameter erwartet aber ein eindimensionales Array aus .net Objekten.

Tja, das generiert ein Object das ein Array ist!

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: