Hi,
ich habe einen Dienst erstellt indem ein
TCP Server aus der
INDY (10.2.5, Original von Delphi 2009) Sammlung verwendet werden soll.
Im OnCreate des Dienstes soll der Server initialisiert und im OnDestroy wieder deinitialisiert werden. Die Komponente TIdTCPServer habe
ich auf ein TDataModule gezogen.
Das folgende klappt wunderbar, der Server funktioniert.
Delphi-Quellcode:
procedure TSvcMain.ServiceCreate(Sender: TObject) begin
try
DMTCPServer.Start;
except
//Fehlermeldung
end;{try..except}
end;
Delphi-Quellcode:
procedure TDMTCPServer.Start;
begin
//init
IdTCPServer.Active := False;
IdTCPServer.Bindings.Clear;
//Einstellungen
IdTCPServer.DefaultPort := 60000;
//Server starten
IdTCPServer.Active := True;
end;
So jetzt kommt es zu dem Teil der nicht mehr klappt. Es wird eine
Exception ausgelöst "Zugriffsverletztung bei Adresse ... in Modul ... Fehler beim Lesen von Adresse ..."
Delphi-Quellcode:
procedure TSvcMain.ServiceDestroy(Sender: TObject)
begin
try
if DMTCPServer.Started
then DMTCPServer.Stop;
except
on E:
Exception do begin
//Fehlermeldung
end;
{on}
end;
{try..except}
end;
Die
Exception wird schon beim aufruf von TDMTCPServer.Started ausgelöst.
Delphi-Quellcode:
function TDMTCPServer.Started: Boolean;
begin
result := IdTCPServer.Active;
end;
procedure TDMTCPServer.Stop;
begin
//Server beenden
IdTCPServer.Active := False;
//Verbindungen löschen
IdTCPServer.Bindings.Clear;
end;
In einer Konsolenanwendung klappt das ganze, ich bekomme dort keine
Exception.
Ich verstehe das nicht so ganz, eigentlich müsste das doch funktionieren.