Bonjour,
Je m'essaye à Lazarus ( 0.9.30 ; W7 64 bits) depuis quelques heures seulement.
Souhaitant adapter des codes Delphi pour m'entraîner et évaluer la facilité de portabilité, je cherche à le faire sur un descendant très simple de TLabel qui surcharge la fonction GetText.
le constructeur permet de "remplacer" le Label initial, passé en var
A l'exécution, j'obtiens une violation d'accès, dès la création, apparemment sur l'appel suivant (je suppose engendrée par ma surcharge de la méthode GetText) à la fonction TControl.GetText de l'unité Control.inc de Lazarus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 constructor TDepasseLabel.Create(var aLabel: TLabel; // ... begin //... aLabel:=self; end;
La syntaxe avec "@" ne m'est pas courante en Delphi, aurais-je dû utiliser aLabel:=@self, ou @aLabel:=@self, ou ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 {------------------------------------------------------------------------------ TControl GetText ------------------------------------------------------------------------------} function TControl.GetText: TCaption; var len: Integer; begin // Check if GetTextBuf is overridden, otherwise // we can call RealGetText directly if TMethod(@Self.GetTextBuf).Code = Pointer(@TControl.GetTextBuf) //ici ! then begin Result := RealGetText; end else begin // Bummer, we have to do it the compatible way.
Ou bien une autre piste ?
Au passage, je récolte une erreur "Error: Project raised exception class 'External:SIGSEGV'" à l'ecécution à partir de l'EDI, ce qui ne facilite pas la trace. Sur le net, il semble que ce puisse être un bug du debugger ?
Merci pour vos idées et conseils.
Partager