Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#19

AW: Cnpack Unit-Cleaner

  Alt 27. Sep 2017, 17:03
Kann man das einfacher erklären?
Nun, der Initialization-Teil einer Unit wird ja nur dann ausgeführt, wenn die Unit auch im Projekt mit eingelinkt ist. Taucht die Unit nirgendwo in einer Uses-Anweisung auf, dann wird sie auch nicht eingelinkt und somit der Initialization-Teil auch nicht ausgeführt. Will man dies trotzdem, dann muss man die Unit irgendwo in einer uses-Anweisung aufführen, auch wenn das syntaktisch zum compilieren nicht nötig wäre.

Beispiel:

Delphi-Quellcode:
unit A;

interface

type
  TMyAbstractClass = class
  public
    procedure DoSomething; virtual; abstract;
  end;

var
  MyInstance: TMyAbstractClass = nil;

implementation

end.
Delphi-Quellcode:
unit B;

interface

implementation

uses
  A;

type
  TMyClass = class(TMyAbstractClass)
  public
    procedure DoSomething; override;
  end;

procedure TMyClass.DoSomething;
begin
 // mach irgendwas
end;

initialization
  MyInstance := TMyClass.Create;
finalization
  MyInstance.Free;
  MyInstance := nil;
end;
Unit B hat einen leeren interface-Teil, kann also nirgendwo zum compilieren gebraucht werden. Trotzdem funktioniert das Programm nicht, wenn Unit B nicht trotzdem irgendwo in der uses-Anweisung steht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat