LabVIEWForum.de
Übergeben einer Struktur! - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: Übergeben einer Struktur! (/Thread-Uebergeben-einer-Struktur)

Seiten: 1 2


Übergeben einer Struktur! - B.C.I. - 08.01.2007 15:00

Zuerst mal danke für die vielen Posts bis jetzt.
Leider gehts auch mit den neuen Ideen nicht.
1D-Array mit 8 Werten ging leider nicht.
Ein Cluster passt leider auch nicht mit der DLL zusammen.

Die letzten 2 Sätze verstehe ich nicht wirklich.
Ich habe 3 Eingänge
- 1*32bit --> kein Problem
- 3*32bit hintereinander --> ein Problem
- 8*32bit hintereinander --> auch ein Problem
das ich 32 Byte hintereinander reinschicke ist leider auch nicht möglich, die größte Zahl in LabVIEW ist soweit ich weiß 4 Byte oder?


Übergeben einer Struktur! - IchSelbst - 08.01.2007 19:11

' schrieb:Die letzten 2 Sätze verstehe ich nicht wirklich.

Folgendes sollte eigentlich funktionieren:

Code:
long Unterprogramm(unsigned long Handle, long AIN1, long AIN2, long AIN3, long AIN4, long AIN5, long AIN6, long AIN7, long AIN8, long SCAN, long dio1_direction, long dio2_direction);
So muss der Funktionskopf der DLL-Funktion in LV8.2 aussehen, nachdem du ihn manuell erstellt hast.

Wenn tatsächlich die Daten explizit übergeben werden, dann liegen sie genau so auf dem Stack - respektive so werden sie mittels des Stacks an das Unterprogramm in der DLL übergeben. Die C++-Anweisung "typedef struct { .. } _AIN;" definiert praktisch einen Speicherbereich, der 8*U32 breit ist. Durch das Benutzen einer Variablen (hier: Analog) des Typs _AIN wird praktisch ein Speicherbereich von 8*U32 referenziert. Schreibst du als Parameter "Analog" in den Funktionskopf, so "kopiert" der Kompiler automatisch diese 8 U32 auf den Stack. Und ob da nun eine Variable, die aus 8 U32 besteht, oder acht Variablen, von denen jede einzelne aus 1 U32 besteht, kopiert werden - für das Unterprogramm in der DLL ist das egal. Hier gilt: es müssen 8 (respektive eben 12) U32 hintereinander am Stack liegen.

Probier das mal aus und sag Bescheid, ob's geklappt hat oder nicht.


Übergeben einer Struktur! - B.C.I. - 22.01.2007 09:41

' schrieb:Folgendes sollte eigentlich funktionieren:

Code:
long Unterprogramm(unsigned long Handle, long AIN1, long AIN2, long AIN3, long AIN4, long AIN5, long AIN6, long AIN7, long AIN8, long SCAN, long dio1_direction, long dio2_direction);
Es funktioniert jetzt!

Vielen Dank für deine Hilfe! Cool