'loha Folks,
Beiträge zu diesem Thema gibt es viele, weitergeholfen hat mir bisher aber leider keiner.
Das Problem ist, dass zur Laufzeit einer Applikation sporadisch Fehlermeldungen generiert werden und zwar meistens dann, wenn mehrere Benutzer gleichzeitig dieselbe Funktion auf verschiedenen Geräten anwenden.
Die Fehlermeldung teilt folgendes mit: Erste Gelegenheit für
Exception bei $77E7E592.
Exception-Klasse EStringListError mit Meldung 'Listenindex überschreitet das Maximum (0)'. Prozess FACTS.exe (1580)
In dieser Meldung variiert der Listenindex wiederum.
Viel mehr kann ich dazu nicht sagen...deshalb -> Code:
Delphi-Quellcode:
function TCANCommunication.TryToGetAnswer(Data: String): Boolean;
var
Time: Cardinal;
begin
Time := GetTickCount;
while Time + WaitForAnswerInterval > GetTickCount do
begin
if CANCommunication.CheckIfAnswerAvailable(Data) = True then //<- hierhin schickt mit der Debugger im Fehlerfall
begin
Result := True;
Exit;
end
else Result := False;
end;
end;
Der Fehler muss also in folgender Funktion zu finden sein:
Delphi-Quellcode:
function TCANCommunication.CheckIfAnswerAvailable(CANMessage: string): Boolean;
var
Request, RequestUserID: String;
i: Integer;
begin
Request := IntToStr(HexStrToInt(CANMessage) + 1);
RequestUserID := Copy(CANMessage, 0, 0);
i := InputBuffer.Data.IndexOf(Request);
if (i > -1) and (i <= InputBuffer.Data.Count) then
begin
try
InputBuffer.User.Delete(i);
InputBuffer.Data.Delete(i);
InputBuffer.Time.Delete(i);
Result := True;
except
Result := False;
end;
end
else Result := False; // no StringList entry (answer) did match with the request
end;
In dieser Funktion wird eine Stringliste nach einer Antwort auf eine Anfrage durchsucht, wird diese Antwort gefunden, wird sie gelöscht.
Der zu löschende Index wird durch die Funktion IndexOf() bestimmt.
Danach wird geprüft ob dieser Index grösser als -1 ist und ob er zudem nicht grösser ist, als die Anzahl aller Einträge.
Zusätzlich wird das löschen noch in einem try except Block verpackt.
[Edit]Ok, das try except verhindert das auftreten der Fehlermeldung, wenn die Ausführbare Datei direkt, also einfach ausserhalb der Entwicklungsumgebund...grml, einfach dann wenn sie nicht mit F9 gestartet wird. Unschön ist das ganze trozdem[/Edit]
Trotz alledem taucht diese Fehlermeldung auf.
Weiss jemand Rat?
Grüsse
hirnstroem