Nur mal kurz drübergeschaut, ich würde versuchen das viel kleiner, modularer auseinander zu ziehen.
Hier ein paar Ideen:
in OptiNumericComm:
ich würde immer versuchen die Länge von dem eigentlichen Objekt (hier comport) zu bekommen, nicht von woanders.
Sonst könnte das schnell um die Ohren fliegen wenn Daten nicht vorhanden.
Delphi-Quellcode:
for i:=1 to 8 do
Result[i] := comport.GetByte; // was macht denn getByte wenn keine Daten mehr da sind ?
an zig anderen Stellen:
ich würde versuchen Enter - Leave in try - except -finally zu kapseln, um besser debuggen zu können
Delphi-Quellcode:
procedure
begin
InitializeCriticalSection(EmpfangCS);
try
try
....
except
on E :
Exception do
begin
// wenn hier ein Dummy-Code steht könnte man die Exception debuggen, und damit wissen wo die herkommt
end;
finally
LeaveCriticalSection(EmpfangCS);
end;
end;