Hallo!
Ich habe eine von mir geschriebene
DLL, die ich in meiner Anwendung lade und wieder entlade. In dieser
DLL wird ein Udp Server erzeugt. Beim Schließen hängt sich die Anwendung auf und leider weiß ich nicht wieso.
Der Code für das Laden und Entladen der
DLL ist recht simpel, weshalb ich annehme, dass dort alles funktioniert:
Delphi-Quellcode:
var
lib: Cardinal;
procedure TForm1.ButtonStartClick(Sender: TObject);
begin
lib := LoadLibrary(PAnsiChar('C:\....'));
end;
procedure TForm1.ButtonStopClick(Sender: TObjekt);
begin
FreeLibrary(lib);
end;
Die Hauptdatei meiner
DLL macht nichts weiter, als eine
Unit einzubinden. Diese
Unit hat einen Initialisierungs- und Finalisierungsteil:
Delphi-Quellcode:
implementation
var
Sore: TSore;
procedure Main(Parameter: Pointer);
begin
Sore := TSore.Create(50001);
Sore.Run;
end;
initialization
Main(nil);
InstallHook; // Funktioniert ohne Probleme, bereits getestet
finalization
RemoveHook; // Funktioniert ohne Probleme, bereits getestet
Sore.Close;
Sore.Free;
Sore := nil;
Das Objekt der Klasse TSore (wofür das steht ist nicht so wichtig
) erzeugt in ihrem Konstruktor einen Udp Server und in der Close-Methode sollte er wieder geschlossen werden.
Delphi-Quellcode:
constructor TSore.Create(port: Integer);
begin
inherited Create;
Self.socket := TIdUDPServer.Create;
Self.socket.DefaultPort := port;
end;
procedure TSore.Run;
begin
Self.socket.Active := True;
end;
procedure TSore.Close;
begin
Self.socket.Active := False; // ab hier reagiert die Anwendung nicht mehr.
Self.socket.Free;
end;
Ich hab es schon im Quellcode geschrieben: ab socket.Active := False; reagiert die Anwendung nicht mehr bzw. der Socket wird nicht geschlossen. Ich habe noch keine Daten geschickt und es kommen auch keine Exceptions. Wenn ich Close weglasse, dann kommt eine Ausnahme, was ich aber auch annehme, denn der Thread des Udp Servers läuft ja noch während die
DLL freigegeben wird.
Könnt ihr mir helfen? Ich hab keine Ahnung, wieso sich die Anwendung aufhängt
Lg oli