' 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.