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.


Thema geschlossen 

Übergeben einer Struktur!



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!

08.01.2007, 15:00
Beitrag #11

B.C.I.
Unregistered


 







Übergeben einer Struktur!
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?
to top
Anzeige
08.01.2007, 19:11
Beitrag #12

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergeben einer Struktur!
' 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.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
to top
22.01.2007, 09:41
Beitrag #13

B.C.I.
Unregistered


 







Übergeben einer Struktur!
' 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
to top
Thema geschlossen 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Struktur mit Zeiger auf weitere Struktur an DLL übergeben Wheeliemaster 2 7.528 27.05.2015 08:40
Letzter Beitrag: Wheeliemaster
  Daten einer Struktur aus LV einer DLL übergeben Predator 11 10.908 12.06.2007 14:00
Letzter Beitrag: rolfk

Gehe zu: