Bonjour.
J'essaye d'utiliser les méthodes MethodAddress et MethodName mais je n'obtiens rien, la première me retournant systématiquement une valeur nil et la seconde une chaîne vide. Et je ne trouve pour ainsi dire aucune information sur ces méthodes. La seule référence, trouvée sur ce site, m'a permis de corriger la façon de récupérer l'adresse de la méthode et la transférer à MéthodName, mais rien.
J'ai essayé depuis TObject, pour me familiariser avec ses méthodes, et comme ça ne marchait pas, avec d'autres classes, TStringList puis une classe faite pour test : mêmes résultats : nil retourné par MethodeAddress et chaîne vide pour l'autre. D'autres méthodes semblent me jouer le même tour.
Un bug d'une vieille version ?
Version : 1.6-dfsg-1 (2016)
FPC : 3.0.0
Le bout de code à intégrer à une application (la TStringList est renvoyée pour afficher dans un TMemo).
Merci.
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 type TClasseA = class(Tobject) constructor Create; destructor Destroy;override; private Param1 : Single; Param2 : Integer; public function test(ParamArray : array of single): boolean; end; var obj:TObject; constructor TClasseA.Create; begin Param1 := 0; Param2 := 0; end; destructor TClasseA.Destroy; begin inherited Destroy; end; function TClasseA.test(ParamArray: array of single): boolean; begin Param1:=1; end; function test_TObject:Tstrings; var chn:TStringList; p:pointer; s:string; met:TMethod; test:TClasseA; begin obj:=TObject.Create(); chn:=TStringlist.Create(); chn.Add('affichage l''adresse d''une méthode de l''objet par MethodAddress()'); s:='test'; test:=TClasseA.Create; p:=test.MethodAddress(s); if (p=nil) then chn.Add(' La méthode "'+s+'" n''existe pas') else begin s:=format(' %s situé à %p',[s,p]); chn.Add(s); end; chn.Add('affichage du nom d''une méthode de l''objet dont l''adresse est connue par MethodName()'); met:=TMethod(@test.test); if (met.Code=nil) then chn.Add(' La méthode "test" n''existe pas.') else chn.Add(' '+obj.MethodName(met.Code)); obj.Free; result:=chn; end;
Partager