Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DFM-Speicherprobleme (https://www.delphipraxis.net/193598-dfm-speicherprobleme.html)

himitsu 18. Aug 2017 14:59

DFM-Speicherprobleme
 
Moin, ich hab da ein kleines Problemchen mit DFMs.

Bei einer Klasse TReader.ReadComponent/TWriter.WriteComponent speichert manchmal keine Events.
Delphi-Quellcode:
published
  procedure miTestClick(Sender: TObject);
Beides sind normale Published-EventMethoden, aber Adresse-zu-Name wird nicht aufgelöst.
TObject.MethodName liefert einen Leerstring.

Rausgefunden hab ich jetzt, dass MethodAddress eine andere Adresse liefert, als die Code-Adresse in der EventVariable.
Mit einer "falschen" Adresse kann natürlich kein Name geliefert werden, aber die Adresse ist richtig, denn das Event kann ja aufgerufen werden. (Button.OnClick)
Und die betroffene Komponente liegt in einem anderem Laufzeitpackage.

Das Einzige, was ich mir da erklären könnte, dass dord die Code-Realocation vergessen wurde, aber eigenartig wäre dann, dass dieser "vermeintliche" Fehler dann seit Jahrzehnten noch keinem aufgefallen wäre. :gruebel:
> Delphi XE

Frame.miTest > $03CB27D0 | $10E3C590 $0DC43674 > ""
miTemplateClick > $0DC45930 | $0EBBB800 $0DC45930 > "miTemplateClick"

TestCode:
Delphi-Quellcode:
var X: TNotifyEvent;

X := Frame.miTestClick;
ShowMessage('Frame.miTestClick > '   + Format('$%p  |   $%p $%p > "%s"', [Frame.MethodAddress('miTestClick'),
  TMethod(X).Data, TMethod(X).Code, Frame.MethodName(TMethod(X).Code)]));

X := Self.miTemplateClick;
ShowMessage('miTemplateClick > ' + Format('$%p  |   $%p $%p > "%s"', [Self.MethodAddress('miTemplateClick'),
  TMethod(X).Data, TMethod(X).Code, Self.MethodName(TMethod(X).Code)]));


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 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