Wątek przeniesiony 2014-12-15 15:19 z przez furious programming. Powód: Niepoprawna kategoria forum

Prośba o sprawdzenie prostego kodu pod Delphi 2007

Odpowiedz Nowy wątek
2014-12-15 14:36
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.

Pozostało 580 znaków

2014-12-15 16:39
0

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


Pozostało 580 znaków

2014-12-15 16:43
1

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


Pozostało 580 znaków

2014-12-15 17:20
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.

edytowany 1x, ostatnio: Integers, 2014-12-15 17:20

Pozostało 580 znaków

2014-12-15 17:58
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.


Pozostało 580 znaków

2014-12-15 18:07
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');

?

edytowany 3x, ostatnio: Integers, 2014-12-15 18:21

Pozostało 580 znaków

2014-12-15 18:32
1

no z tego wynika ze w twojej wersji nie zadziala


Pozostało 580 znaków

2014-12-15 18:35
0

dzięki.

edytowany 1x, ostatnio: Integers, 2014-12-15 19:34

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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