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 

C++ DLL mit komplexer Datenstruktur inLabVIEW verwenden



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!

06.02.2009, 07:10 (Dieser Beitrag wurde zuletzt bearbeitet: 06.02.2009 07:12 von rolfk.)
Beitrag #3

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
C++ DLL mit komplexer Datenstruktur inLabVIEW verwenden
' schrieb:Das sehe ich auch so. Denknach

Nein, gedacht ist das genau richtig.
Ich gehe davon aus, dass es so geht - so gehen soll.

Nur eine kann richtig sein.
Ich gehe davon aus, deine erste Methode ist richtig. Was richtig ist, muss in der Beschreibung der DLL-Funktionen stehen. Wenn da eine Funktion mit nur einem Parameter steht, kann nur deine erste Version richtig sein. Und die Methode mit den 50 Eingängen - sowas macht keiner.

Also der Prototyp (leider Visual Basic BHÄÄÄÄÄ) sagt deutlich dass die struct (der C Begriff eines Clusters) ByRef übergeben wird. Das heisst es muss ein Pointer übergeben werden. Wenn es ByVal wäre wäre der Zweite Approach richtig (mein lieber Himmel!!!).

Zitat:So einen großen Cluster mit so vielen Parametern hab ich auch noch nicht gesehen. Drei Möglichkeiten fallen mir ein, die du mal prüfen müsstest. Ich hätte ja die erste bevorzugt.

Erstens:
Cluster erstellen. Dann ein Array of U8 erstellen, das die Länge des erwarteten Speicherbereiches hat. Danach die Daten aus dem Cluster der Reihe nach manuell hart typcasten in das Array of U8. DLL aufrufen und das ganze rückwärts. Für kleine, komplexe Cluster kann man das so machen.

Zweitens:
Du kannst mal "Daten serialisieren" probieren. Dabei gibst du den Cluster auf das Serialisier-Element - heraus kommt ein Datenstream in Form eines Strings. Den String gibt du an die DLL als PChar. Rückwärts musst du das selbe probieren: den String aus dem DLL-Knoten auf ein Deserialisierungs-Element. Das Element bekommt den Cluster als Typeingang und liefert am Ausgang einen Datencluster. Ob das geht weiß ich nicht. Ich war noch nie in der Situation, einen derartigen Cluster an eine DLL zu übergeben.

Drittens:
Eine Wrapper-DLL. Mach dir eine C++-DLL, die auf der einen Seite die User-DLL bedienen kann. Das sollte einfach sein. Und auf der anderen Seite machst du eine oder mehrere Funktionen, die LV bedienen kann. Das ist auch einfach.

1) ist möglich aber immens viel Arbeit. Ich habe nicht im Detail die Definition betrachtet aber ich konnte so auf die Schnelle keine Array und String Pointer sehen. Dann geht es nämlich eigentlich nicht. LabVIEW Arrays und Strings sind nicht direkt kompatibel mit C Strings und Arrays. Direkt als Parameter kann man die durch die Call Library Node übersetzen lassen nach C Pointern aber innerhalb eines Clusters geht das nicht.

Was ich sah waren fixed size Arrays (die haben alle eine Nummer zwischen eckigen Klammern hinter dem Variablennamen). Diese kann man durch einen eingebetteten Cluster mit der entsprechenden Anzahl Elemente vom Typ den die Variable hat simulieren.

2) Vergiss es. Das Serialisier Format packt alle Daten im Cluster zusammen und fügt bei Arrays und Strings noch eine i32 Zahl hinzu die die jeweilige Anzahl der Elemente angibt die nun folgt.

3) Mein absoluter Verzug. Diese Funktion alleine macht diesen Wrapper eigentlich schon fast eine Pflicht. Wenn da noch andere Funktionen hinzukommen mit auch nur halb so komplexen Parametern dann hat sich der Wrapper im Endeffekt ganz sicher bezahlt gemacht.

Rolf Kalbermatter

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 


Nachrichten in diesem Thema
C++ DLL mit komplexer Datenstruktur inLabVIEW verwenden - rolfk - 06.02.2009 07:10

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  DLL mit Pointer - Einbindung inLabVIEW sebastian1986 3 6.149 24.11.2009 21:02
Letzter Beitrag: rolfk
  Einführung inLabVIEW Kapitel 15 subzero128 12 10.792 24.08.2009 07:57
Letzter Beitrag: rolfk
  C-Code inLabVIEW Embedded for ARM ? amin 10 13.852 20.08.2009 11:06
Letzter Beitrag: KalleKrabowski
  Simulink Modell dll inLabVIEW einbinden / ausführen MIIIB 11 15.771 28.07.2009 14:09
Letzter Beitrag: MIIIB
  C-struktur inLabVIEW einbinden Olmor 4 5.323 24.07.2009 11:08
Letzter Beitrag: abrissbirne
  Matlab XPC Bedienungs-Oberfläche inLabVIEW gestalten Florian_TU-BS 11 11.110 05.05.2009 14:03
Letzter Beitrag: Florian_TU-BS

Gehe zu: