Das ist die uebliche Verwechslung von Pointer auf Struktur und Struktur.
Delphi-Quellcode:
procedure InitOverlapped(var Overlapped: TOverlapped);
begin
Overlapped.Offset := 0;
Overlapped.OffsetHigh := 0;
Overlapped.Internal := 0;
Overlapped.InternalHigh := 0;
Overlapped.hEvent := CreateEvent(nil,True,False,'');
end;
Der Eventname ist verdaechtig ein anonymer Event verwendet nil statt ''.
Ist ein ManualReset-Event noetig?
Hier setzt sich der Fehler fort.
Delphi-Quellcode:
function ReceiveCommand(...):..
var
...
Overlapped: TOverlapped;
begin
InitOverlapped(Overlapped);
Ret := UsbBulkRead(deviceHandle, 0, 0, 0, @USBcb, 8, BytesReceived, @Overlapped);
Wird denn nach UsbBulkRead auf den Event gewartet? Wenn nicht wird die Funktion verlassen und Overlapped wird zerstoert. Es muss sichergestellt werden das Overlapped solange existiert bis UsbBulkRead den Event nicht mehr triggert.