Guten Morgen Forumuser.
Ich bin zwar schon seit einigen Jahren in Kontakt mit LabVIEW, jedoch beginn ich erst jetzt mich näher damit zu befassen.
Jetzt ist ein Problem aufgetretten das ich selbst nicht lösen kann, deshalb würde ich mich freuen wenn mir jemand von euch helfen würde. Und zwar folgendes:
Ich habe eine DLL (welche ich nicht ändern kann), und will jetzt folgendes Unterprogamm aufrufen:
BOOL UP(HANDLE hDevice,_BUFFER_ST *buffer,LPOVERLAPPED lpOvl);
Return-Wert ist kein problem, U32
hDevice bekomm ich auch ohne Probleme hinein
Jedoch machen mit _BUFFER_ST und LPOVERLAPPED Sorgen:
typedef struct
{
SHORT *pBuffer; // Pointer to buffer
UINT size; // Buffersize in bytes: max. 1024 bytes
UINT validPoints; // number of data points returned from driver
}_BUFFER_ST;
size ist unsingend INT (32bit) und validPoints das selbe
Jedoch wissen wir nicht wie wir in LabVIEW einen Buffer erstellen bzw. den Zeiger darauf bekommen!
Auf jeden Fall bekommen wir als Rückgabewert nur 0 (false) bzw. 1 (aufruf erfolgreich) zurück, das heißt der Buffer muss sich selbst IRGENDWIE auffüllen (oi...)
Daher die Frage: Wie erstelle ich einen Buffer und mache einen Zeiger darauf?
typedef struct _OVERLAPPED {
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
HANDLE hEvent;
} OVERLAPPED, *LPOVERLAPPED;
Also da wird der Zeiger auf LPOVERLAPPED übergeben, da hab ich echt KEINE AHNUNG wie das funktioniert. Vom C-File kann ich nur eines sagen.
hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
ov.hEvent = hEvent;
ov.Offset = 0;
ov.OffsetHigh = 0;
Ob ich jetzt alle Elemente der Struktur einzeln übergeben muss oder nicht weiß ich ebenfalls nicht.
Please Help