Hallo
Ich bin dabei eine Server-Client Anwendung zu schreiben (
Indy,
TCP). Bis jetzt funktioniert alles auch ganz gut, bis auf diesen (kleinen),
imho sehr seltsamen Fehler:
In meinem Client habe ich u.A. die Komponenten TIdTCPClient (
Indy) und TJvRichEdit (
Jedi). Das JvRichedit dient als Log. Am Anfang jeder Zeile setzte ich ein kleine Grafik, damit es etwas übersichtlicher wird.
So, nun zum Problempunkt:
Im OnDisconnected des Clients soll er im JvRichEdit festhalten, dass die Verbindung getrennt wurde. Dies funktioniert prima, jedoch wenn die Verbindung vom Server beendet wird, wird die "OnDisconnected" ausgeführt, es kommt aber beim Einfügen des Image vom Debugger folgende Fehlermeldung:
Delphi-Quellcode:
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Client.exe ist eine
Exception der Klasse EOleSysError aufgetreten. Meldung: '
CoInitialize wurde nicht aufgerufen'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
So, für das bessere Verständnis noch etwas Code:
Delphi-Quellcode:
//CLIENT
procedure TForm1.ClientDisconnected(Sender: TObject);
var
Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
try
ImageList.GetBitmap(1, Bitmap);
try
// Hier der Fehler: Funktioniert korrekt, es sei den die Verbindung
// wird _vom Server_ nicht "sauber" beendet!!
form1.JvRichEdit1.InsertGraphic(Bitmap, False); // <- Der Fehler!
finally
form1.JvRichEdit1.Lines.Add('Verbinung getrennt'); //Geht IMMER !!
end;
finally
Bitmap.Free;
end;
end;
//SERVER
//Ich benutze diesen Code zum Trennen der Clients
with Clients.LockList do
try
for i := 0 to Count-1 do
begin
Client := Items[i];
ClientThread := Client.Thread;
ClientThread .Connection.Disconnect;
Application.ProcessMessages;
end;
finally
Clients.UnlockList;
end;
Ich kann echt nicht verstehen, dass das Einfügen so herlich funktioniert, es sei denn die Verbindung wird nicht richtig getrennt.
Anscheinend wird in
Indy eine
Exception durch das unsaubere Trennen ausgelöst, intern verarbeitet und dann das OnDisconnected ausgeführt, jedoch durch die
Exception irgendwas nicht initalisiert. Aber warum weiß ich auch nicht, den
Indy hat ja nichts mit den Jedis zutun, etc. ... Ich bin ratlos
Hoffentlich kann mir jemand helfen!
---Bernhard---