![]() |
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 |
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;
|
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).
|
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 |
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 |
AW: Freigabe von verknüpften Komponenten
Danke Heiko für die Anregung. Das werde ich mal probieren!
|
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 10:55 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 by Thomas Breitkreuz