Erstmal vielen Dank für die schnelle Antwort.
Zitat von
Robert Marquardt:
Das ist die uebliche Verwechslung von Pointer auf Struktur und Struktur.
Verstehe das nicht genau. Was genau bedeute Verwechslung?
Zitat von
Robert Marquardt:
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?
Ich muss zugeben, dass ich mich damit noch nicht auseinandergesetzt habe, weil die Zugriffsverletzung schon bei 'Overlapped.Offset := 0;' auftritt. Habe dieses Codesegment so im Netz gefunden. Hab es erstmal so übernommen. Wie schon angedeutet, bin ich mit sowas noch nicht in Berührung gekommen. Leider hilft die Delphi Hilfe da auch nicht weiter
Zitat von
Robert Marquardt:
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.
Also mein Ansatz sollte folgender sein: Soweit ich das verstanden habe, wird die Funktion (UsbBulkRead) sofort wieder verlassen, wenn ich das Overlapped verwende. Nun möchte ich eine gewisse (Timeout-) Zeit nach dem Lesen warten und dann schauen ob gelesen wurde oder nicht. Ist das so zu realisieren oder habe ich da was falsch verstanden?
Nochmals vielen Dank!