Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Freigabe von verknüpften Komponenten (https://www.delphipraxis.net/189420-freigabe-von-verknuepften-komponenten.html)

Alex_ITA01 10. Jun 2016 10:34

Freigabe von verknüpften Komponenten
 
Hallo zusammen,
ich habe eine kurze Frage zur Freigabe von zweier Komponenten, wenn diese mit einander verknüpft sind.

Beispiel:
NUR Komponente A auf einem Formular -> Programm Beenden -> keine Speicherlecks
NUR Komponente B auf einem Formular -> Programm Beenden -> keine Speicherlecks

Beide Komponenten auf einem Formular -> In Komponente A kann man im Objektinspektor die Komponente B angeben (verknüpfen) -> Programm Beenden -> paar kleinere Unknown Speicherlecks

Habt ihr eine Idee, wie ich da dahinter komme, wer diese unknowns sind bzw. muss man bei verknüpften Komponenten etwas anders machen?

Hoffe ihr könnt mir da ein Tip geben.
Grüße

Sir Rufo 10. Jun 2016 10:42

AW: Freigabe von verknüpften Komponenten
 
Wenn die Komponenten vernünftig programmiert sind, dann sollte so etwas nicht auftauchen.

Da sie wohl einen Bug haben, musst du wohl im Destroy des Owners diese Verbindung zwischen den beiden auflösen müssen.

Delphi-Quellcode:
A.B := nil;

Jumpy 10. Jun 2016 11:01

AW: Freigabe von verknüpften Komponenten
 
Oder schauen, ob B in A freigegeben wird (sprich ob irgendwo in A sowas wir B.Free steht). Das müsste dann weg, denn da B von Außen zugegeben wird, sollte es auch nur Außen freigegeben werden (aus Sicht von A).

Alex_ITA01 10. Jun 2016 11:18

AW: Freigabe von verknüpften Komponenten
 
Da jede Komponente eigenständig lauffähig ist und nicht die andere als Voraussetzung braucht (und auch keine Speicherlecks verursacht), glaube ich spontan nicht, dass die Komponenten falsch programmiert sind. Ich gucke mal, ob irgendwo von der einen hart auf die andere referenziert wird und etwas freigegeben wird.

Grüße

hoika 10. Jun 2016 12:46

AW: Freigabe von verknüpften Komponenten
 
Hallo,

zuerst:
Sind das Deine eigenen Komponenten?
Nimmst du FastM4 und hast beim Linker die Debug-Optionen (TD32 und externe DebugSymbole) an?


dann 1:
Mach mal ein neues Projekt 1, dann beide Komponenten drauf OHNE die Verknüpfung.

dann 2:
Mach mal ein neues Projekt 2, dann beide Komponenten drauf MIT der Verknüpfung.

dann 3:
Mach mal ein neues Projekt 2, dann beide Komponenten drauf, Verknüpfung im Code (FormCreate)


Damit solltest du dem Speicherschlingel doch auf die Spur kommen.


Heiko

Alex_ITA01 10. Jun 2016 12:50

AW: Freigabe von verknüpften Komponenten
 
Danke Heiko für die Anregung. Das werde ich mal probieren!

himitsu 13. Jun 2016 10:59

AW: Freigabe von verknüpften Komponenten
 
Selbstgebaute Komponenten?

Die entwickelt man natürlich richtig und nutzt die Notifications von TComponent, damit sich Verlinkungen aufräumen.
Beispiel: TDBGrid.DataSource ... das Property wird automatisch nil, wenn man die TDataSource freigibt.

Delphi-Quellcode:
type
  TMyComponentA = class(TComponentDescendant)
  private
    FLink: TMyComponentB;
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  public
    property Link: TMyComponentB read FLink write FLink;
  end;

procedure TMyComponentA.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (FLink = AComponent) then
    FLink := nil;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz