AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Meine Komponente wirft Exceptions zur Designtime. Warum?
Thema durchsuchen
Ansicht
Themen-Optionen

Meine Komponente wirft Exceptions zur Designtime. Warum?

Ein Thema von LDericher · begonnen am 30. Okt 2009 · letzter Beitrag vom 30. Okt 2009
 
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
949 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

Re: Meine Komponente wirft Exceptions zur Designtime. Warum?

  Alt 30. Okt 2009, 21:22
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ß
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 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