Thema: Delphi DFM-Speicherprobleme

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#1

DFM-Speicherprobleme

  Alt 18. Aug 2017, 14:59
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.
> 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)]));
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat