Christian Schmitt
2017-09-11 10:24:44 UTC
Hallo Leute,
ich habe mal wieder ein Problem, bei dem ich Experten brauche :-)
Folgende Funktion:
function TPVIItem.GetPlcVariableName(i: Integer): AnsiString;
begin
Result := '';
if not(i in [0 .. High(FPviObject)]) then
begin
DebugLog.Add(DateTimeToStr(now)+' Index out of Range: I=' + IntToStr(i)+' High(FPviObject)='+inttostr(High(FPviObject)));
exit;
end;
Result := FPviObject[i].Name;
end;
I wird von 0 durchgezählt bis High(FPviObject). Genau bei I=7 ist die If-Abfrage True und mein Debug-Log gibt folgendes aus:
9/11/2017 6:15:42 PM Index out of Range: I=7 High(FPviObject)=262
Wenn ich die If-Abfrage wie folgt ändere:
if not((I>=0) and (I<=High(FPviObject)) then
dann funktioniert alles. Das lustige ist, dass die Software erst spinnt, seit dem 16 FPviObjects dazugekommen sind, vorher lief die Software ein halbes Jahr stabil. Und ich habe an dieser Routine rein gar nichts verändert...
Hat jemand eine Erklärung? Muß ich jetzt alle meine "A in B" Konstrukte umändern?
Gruß
ich habe mal wieder ein Problem, bei dem ich Experten brauche :-)
Folgende Funktion:
function TPVIItem.GetPlcVariableName(i: Integer): AnsiString;
begin
Result := '';
if not(i in [0 .. High(FPviObject)]) then
begin
DebugLog.Add(DateTimeToStr(now)+' Index out of Range: I=' + IntToStr(i)+' High(FPviObject)='+inttostr(High(FPviObject)));
exit;
end;
Result := FPviObject[i].Name;
end;
I wird von 0 durchgezählt bis High(FPviObject). Genau bei I=7 ist die If-Abfrage True und mein Debug-Log gibt folgendes aus:
9/11/2017 6:15:42 PM Index out of Range: I=7 High(FPviObject)=262
Wenn ich die If-Abfrage wie folgt ändere:
if not((I>=0) and (I<=High(FPviObject)) then
dann funktioniert alles. Das lustige ist, dass die Software erst spinnt, seit dem 16 FPviObjects dazugekommen sind, vorher lief die Software ein halbes Jahr stabil. Und ich habe an dieser Routine rein gar nichts verändert...
Hat jemand eine Erklärung? Muß ich jetzt alle meine "A in B" Konstrukte umändern?
Gruß