![]() |
FreeLibary verursacht Absturz
Hi Leute!
Ich fange gerade richtig mit DLLs an und steige da nicht ganz dahinter:
Delphi-Quellcode:
In der DLL wird ein Thread mit Objekten erstellt, der sich beim Aufruf der "Stop" Funktion (Thread.Beenden:=True; Beim nächsten Thread.Execute wird die Schleife nicht mehr wiederholt; Thread.FreeOnTerminate=True) selbst beendet.
procedure TForm1.Button1Click(Sender: TObject);
i: integer; blResult : function: boolean; stdcall; begin while i = 0 do begin h1 := ConnectDLL('meinedll.dll'); @blResult := GetProcAddress(h1, pchar('Start')); if (@blResult <> Nil) then blResult; end; end; end; procedure TForm1.Button3Click(Sender: TObject); var blResult : function: Boolean; stdcall; begin @blResult := GetProcAddress(h1, pchar('Stop')); if @blResult <> NIL then blResult; FreeLibrary(h1); end; Rufe ich dann FreeLibary auf, ist es auch noch ok, aber in der Zeile dannach (end; (!) ???????) stürzt das Programm mit der Meldung: --------------------------- Information --------------------------- In Projekt C:\Dokumente und Einstellungen\name.MAX1337\Eigene Dateien\050218\_debug\Project2.exe trat ein Problem mit folgender Meldung auf: 'Zugriffsverletzung bei 0x7c9478bf: Schreiben von Adresse 0x01940ffc'. Prozeß angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK --------------------------- Damit kann ich wie immer sehr viel Anfangen *Ironie*. Hat irgendwer einen Tip woran das liegen könnte? |
Re: FreeLibary verursacht Absturz
Wahrg mist, hatte eben den Debugger komplett aus und schon gefreut, dass ich keine Fehlermeldung mehr erhalte... *seufz*
|
Re: FreeLibary verursacht Absturz
Ich weiß nicht, ob es damit zu tun hat, aber bei mir trat das gleiche Problem ebenfalls auf; nämlich dann, wenn ich das Programm beendet habe und den Thread freigeben wollte.
Dann habe ich den Befehl WaitFor entdeckt und eingesetzt, kurz bevor das Programm beendet werden sollte. Dadurch wartet es nun brav, bis der Thread fertig ist. (Vorher natürlich Termitate aufrufen) Ab da kam dann keine Schutzverletzung mehr. Gruß Pfoto |
Re: FreeLibary verursacht Absturz
Kann ich vielleicht in der DLL in der STOP Procedure nicht auf die Variable zugreifen, die ich in Start gesetzt habe?
Das andere hat leider bisher nicht geholfen. Bekommen nun "Handle ungültig" bei FreeLibrary: DLL:
Delphi-Quellcode:
function Start: TThread; stdcall;
begin n := TMyThread.Create; n.Resume; Result := NIL end; procedure Stop; stdcall; begin n.Beenden := true; n.WaitFor; // Nochmal neu: FreeAndNil(n); end;
Delphi-Quellcode:
procedure TMyThread.Execute;
begin while not Self.Terminated and not beenden do begin // Mache was end; // Alle Komponenten des Threads hier freigeben etc. Self.Terminate; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz