Wątek przeniesiony 2014-12-15 15:19 z Newbie przez furious programming.

Prośba o sprawdzenie prostego kodu pod Delphi 2007

0

Witam. Jest prośba o sprawdzenie prostego kodu jedna forma główna i dwie gołe klasy.
W załączniku kod pod Delphi 2007.

  1. W załączniku jest tez plik exe, dajcie proszę znać czy u was antywirus też pokazuje że plik jest zagrożony. Nie wiem co się dzieje ale przy innych kompilacjach Antywirus nic nie sygnalizuje a tutaj uparcie mnie ostrzega już w czasie kompilacji.

  2. W załączonym kodzie próbuję wyłączyć program w klasie podrzędnej i sprawdzam czy działają wszystkie funkcje Destroy. Chce się upewnić ze nie ma "wycieków" ale nie pokazuje się żaden komunikat zamieszczony w Destroy.

Formy głównej nie używam u siebie .. tutaj tylko podpiąłem żeby wywołać Application.Terminate;
używam w głównym module:

Unit1;

...

procedure TForm1.BtnExitClick(Sender: TObject);
begin
   kAp.Terminate;
end;

procedure Main();
begin
   Application.ShowMainForm := True; // False;       // ukrywa forme główną (mainform)

   if kAp <> nil then FreeAndNil(kAp);
   kAp:= TkAp.Create;
   kAp.Init;

   // Form1.Show;
end;

procedure MainFree();
begin
   kAp.Free;
end;


initialization
   // MessageBox(0, 'Rozpoczynamy pracę z modułem...', 'OK', MB_OK);
   Main();
   
finalization
   // MessageBox(0, 'Kończymy pracę z modułem...', 'OK', MB_OK);
   MainFree();
unit Unit2;

interface

uses
  Unit3,

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type

  TkAp = class

  private
  protected
  public
    constructor Create();
    destructor Destroy();override;
    function  Init(): Boolean;
    function  Terminate: Boolean;
  end;

var
   kAp: TkAp;

implementation


constructor TkAp.Create();
begin //
   if kClass3 <> nil then FreeAndNil(kClass3);
   kClass3:= TkClass3.Create;

end;

destructor TkAp.Destroy();
begin //
   ShowMessage('TkAp.Destroy');
   
   FreeAndNil(kClass3);
end;

function  TkAp.Init(): Boolean;
begin //
   // Result:= False;

   Result:= True;
end;

function  TkAp.Terminate: Boolean;
begin //
   kClass3.Terminate;
   
   Result:= True;
end;

end.
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type

  TkClass3 = class

  private
  protected
  public
    constructor Create();
    destructor Destroy();override;
    function  Init(): Boolean;
    function  Terminate: Boolean;
  end;

  
var
   kClass3: TkClass3;

   
implementation


constructor TkClass3.Create();
begin //

end;

destructor TkClass3.Destroy();
begin //
   ShowMessage('TkClass3.Destroy');

end;

function  TkClass3.Init(): Boolean;
begin //
   Result:= True;
end;

function  TkClass3.Terminate: Boolean;
begin //
   Application.Terminate;

   Result:= True;
end;

end.

Kod uprościłem prawie do maximum.. Albo coś przeoczyłem albo system i kompilator do przeinstalowania :) Pozdrawiam.

0

a dlaczego chcesz sie upewnic czy nie ma wyciekow? Jak za chwile program sie zamknie.

1

@Integers: pod ESS 7 nie ma żadnego alertu. Polecam zmienić program AV na ten produkt by uniknąc najprawdopodobniej wielu false positives.

0

dzięki @olesio

@mca64 bo chcę sprawdzić czy ta klasa podrzędna i inne sprzątają po sobie. Następnym razem te klasy będą używane w innym miejscu i jeśli nie będą sprzątać to na przykład na liście dynamicznej .. może mi braknąć pamięci albo wyskakiwać błędy że jakiś komponent/ klasa o danej nazwie już jest mimo że powinna zginać.
Zamykanie programu to jedno a Free klas to drugie.. no i te nieszczęsne ShowMessages które jakimś cudem nie chcą się pokazywać a powinny.

1

to sprawdz to inaczej. Np dodaj do projektu

ReportMemoryLeaksOnShutdown := DebugHook <> 0

albo

procedure TForm1.Button1Click(Sender: TObject);
begin
kAp:= TkAp.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
kAp.Free;
end;

W ogole czemu uzywasz starszej wersji Delphi? A zwracasz uwage tam gdzie nie ma problemu.

0

Do takiej wersji mam dostęp.. a co do drugiego .. no cóż można i tak. Dzięki.
Tylko czy to oznacza że po

Aplication.Terminate;

i

finalization

nie zadziała żaden

ShowMessage('tekst');

?

1

no z tego wynika ze w twojej wersji nie zadziala

0

dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1