Hi,
bin ja nicht so
nachdem ich einige Sachen (Win7
SDK, WAIK usw. runtergeladen habe) habe ich den Code mal durch D7 und D2K9 gejagt.
Ergebnis:
Der Destructor von THandle ist nicht sauber!
Es sind zwei unterschiedliche Ergebnisse zu erwarten:
1) So wie schon geschreiben, neue App,
Unit mTHandler einbinden, Variable deklarieren, zwei Buttons (ein Create, ein Destroy) drauf, F9, Create drücken, App beenden: -> läuft!
2) F9, Create drücken, Destroy drücken, App beeenden: -> läuft
nicht.
Her der geänderte destructor:
Delphi-Quellcode:
destructor THandler.Destroy;
var
I:integer;
begin
vRawCode.Free;
vParsedCode.Free;
for I:= (High(vPlugins))downto 0 do FreeLibrary(vPlugins[I]);
inherited Destroy;
end;
Und hier die TestApp:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, mTHandler, StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
TH : THandler;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
TH := THandler.Create(Self);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Button2Click(Sender);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if (TH <>
nil)
then FreeAndNil(TH);
// ein TH.Free geht garnicht, warum?!
end;
end.
So LDericher, nun quäl dich mal selber ein wenig, bis zur Lösung.
An deinem 'vergessenen' read liegt es wohl nicht.
Gruß