Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Thread aus DLL ohne fehler schließen!! (https://www.delphipraxis.net/53411-thread-aus-dll-ohne-fehler-schliessen.html)

Sillium 15. Sep 2005 19:44


Thread aus DLL ohne fehler schließen!!
 
Hi,


ich erstelle in einer DLL einen Thread:

Delphi-Quellcode:
type
  TAnimationThread = class(TThread)
  private
    { Private declarations }
    FWnd: HWND;
    DC : HDC;
    FPaintRect: TRect;
    FfgColor: TColor;
    FInterval: integer;
  protected

  protected
    procedure Execute; override;
  public
    FName : String;
    Image :TBitmap;
    wnd : hWnd;
    procedure Ready;
    constructor Create(barcolor : TColor; name : String);
  end;

{**********************************************************************
  Konstruktor
***********************************************************************}

constructor TAnimationThread.Create(barcolor : TColor; name : string);
begin
  inherited Create(True);
  Application.CreateForm(TSplash2, Splash2);
  Splash2.Show;
  FfgColor := barColor;
  FName := name ;
  //FreeOnterminate := True;
  Resume;
end; { TAnimationThread.Create }
Im TAnimationThread.execute wird eine Form (Splash2) erstellt, die den Benutzer zeigt, dass gerade was gemacht wird (Bitte warten). Auf dieser Form läuft ein einem Panel ein Bitmap von links nach rechts und zurück............

Funktioniert alles wunderbar!

So wird der Thread aufgerufen:
Delphi-Quellcode:
{* Start-Prozedur *}
procedure DLLWorking(nameP:PChar);stdcall;
var
name:String;
ani : TAnimationThread;
begin
      name:=String(nameP);
      ani := TanimationThread.Create($00556F60, name);
      Application.ProcessMessages;
end;
Zum beenden habe ich diese Prozedur:

Delphi-Quellcode:
{* End-Prozedur *}
procedure DLLReady(wnd:Hwnd);stdcall;
var
ani : TAnimationThread;
begin
      ani.Ready; <---- schließt die Form!
      ani.Terminate; <----- soll meinen Thread beenden!!?????
end;
Wenn ich die DLL in Delphi ausführe (mit entsprechendem Projekt!) klappt alles ohne Fehler. Wenn ich allerdings das Projekt in Delphi ausführe bekomme ich einen Fehler!

Zugriffsverletzung.......

Danke für die Hilfe!

Sillium

Zacherl 15. Sep 2005 20:40

Re: Thread aus DLL ohne fehler schließen!!
 
Delphi-Quellcode:
{* End-Prozedur *} 
procedure DLLReady(wnd:Hwnd);stdcall;
var
ani : TAnimationThread;
begin
      ani := TAnimationThread.Create; //Das vielleicht? Warum ist das Threadobjekt Local deklariert
      ani.Ready; <---- schließt die Form! 
      ani.Terminate; <----- soll meinen Thread beenden!!????? 
end;
Ani sollte Global deklariert werden und beim 1. Aufruf mit Create erzeugt werden! Da wenn ich das richtig sehe du in DLLReady einen zum 1. nicht erzeugten Thread und zum 2. nicht den mit DLLWorking gestarteten Thread beenden willst.

Florian

Sillium 15. Sep 2005 20:47

Re: Thread aus DLL ohne fehler schließen!!
 
Kann man in einer DLL global deklarieren??

In DLLWorking wird mein Thread mit

Delphi-Quellcode:
 ani := TanimationThread.Create($00556F60, name);
erstellt!!

Sillium 21. Jan 2006 12:13

Re: Thread aus DLL ohne fehler schließen!!
 
Hallo,

stehe immer noch vor dem gleichen Problem!!

Hat vielleicht jemand eine Lösung!

Kann ich in der Funktion DLLWorking ein öffentliches Handle erstellen und an DLLReady übergeben??

Aber wie??

Danke!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz