1. Frage:
' schrieb:>welcher dies dann umwandelt bzw einen pointer erstellen der auf das array zeigt!
Im Prinzip genau so.
So, der übermäßige C-Programmierer war ich noch nie, also wie erstelle ich etwas derartiges? Ich übergebe der DLL (dem C-Code) mein Array, und wie gebe ich dann als "Rückgabewert" den Zeiger darauf aus?
2. Frage:
Unsere Übergabe einer Struktur an die DLL (kein Pointer) soll laut unserem Projektleiter auch nicht funktionieren.
> Der C-Code
GT_InitChannels(HANDLE hDevice,_AIN analogCh,_DIO digitalCh);
typedef struct // structure used to define analog channels
{
BOOL ain1; // TRUE: scan channel 1, FALSE: do not scan channel 1
BOOL ain2; // ...
BOOL ain3;
BOOL ain4;
BOOL ain5;
BOOL ain6;
BOOL ain7;
BOOL ain8; // TRUE; scan channel 8, FALSE: do not scan channel 8
}_AIN;
typedef struct // structure used to define digital lines
{
BOOL scan; // TRUE to scan digital lines, FALSE: do not scan digital lines
BOOL dio1_direction; // TRUE sets direction "IN", FALSE sets direction "OUT" (DIO 1)
BOOL dio2_direction; // TRUE sets direction "IN", FALSE sets direction "OUT" (DIO 2)
}_DIO;
> Unsere Lösungsidee (alt)
Jedes Strukturelement wird einzeln übergeben
> Logische Lösungsidee
Die Strukturelemente werden zu einem Array zusammengefügt und dann erst der DLL übergeben. Jedoch stürtzt hier das Programm beim ausführen sofort ab.
unsigned long GT_InitChannels(long hDevice, Array1DLong **_AIN, Array1DLong **_DIO);
3. Frage:
Das ewige Problem der Datenbeschaffung
GT_GetData(HANDLE hDevice,_BUFFER_ST *buffer,LPOVERLAPPED lpOvl);
Unsere Idee wäre wie folgt
Ob sie funktioniert ist eine andere Idee. Wie dann der Funktionsaufruf der DLL etc. aussieht wissen wir nicht. Also die DLL soll einen Zeiger auf das Array erstellen, und zusammengepackt mit den anderen 2 Werten an die 2. DLL (GetData) übergeben werden.