[delphi] Method pointers

Pagina: 1
Acties:
  • 116 views sinds 30-01-2008
  • Reageer

  • mrClass
  • Registratie: April 2002
  • Laatst online: 17-04-2025
Ik al eens even rondgekeken op GoT, maar ik heb een simpel probleempje waar ik niet echt uit kom:

Ik heb dit:

code:
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
type
  Tproc = procedure(value : boolean) of object;
  Tfunc = function : boolean of object;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    SetProperty : Tproc;
    GetProperty : Tfunc;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
  PropInfo : Ppropinfo;
begin
  PropInfo := GetPropInfo(button1,'enabled');

  GetProperty := PropInfo.GetProc;  // !Werkt niet!
  SetProperty := PropInfo.SetProc;  // !Werkt niet!
end;

end.


Het probleem is, dat in het Ppropinfo record een pointer teruggeeft naar de GetProc en SetProc. En geen procedure/function of Tobject. Maar toch wil ik die GetProperty en SetProperty laten pointen naar de GetProc en SetProc van de property. Hoe doe ik dat?

Foutmelding Incompatible types: Tproc and Pointer

  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 17:25
kan je ze niet gewoon typecasten ?


edit:


dus

GetProperty := TPoc(PropInfo.GetProc);

[ Voor 52% gewijzigd door MerijnB op 23-04-2004 15:20 ]

A software developer is someone who looks both left and right when crossing a one-way street.


  • mrClass
  • Registratie: April 2002
  • Laatst online: 17-04-2025
Neej ik kan het niet typecasten: "invalid typecast". Maar ik heb wel een functie gevonden die wel de property kan aanpassen namelijk, dat bespaart mij geklooi met procedure pointers:

code:
1
SetPropValue(button2,'enabled', false);


Deze zit in TypInfo.pas

Mar ik zou nog wel willen weten hoe je dit probleem moet aanpassen.

  • BoomSmurf
  • Registratie: Maart 2003
  • Laatst online: 13-06-2025

BoomSmurf

Am-Ende!

Heb Delphi even niet bij de hand (ben niet thuis), maar als ik het goed herinner zijn de procs van PPropInfo normale procedures. Deze moet je ten eerste behandelen als pointers, dat werkt een stukje makkelijker. Verder is een procedure of functie van een object een dubbele pointer. Daar moet je de goeie van nemen en dan werkt het wel.

http://groups.google.com is je vriend.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Een property kan, zoals je misschien wel weet, getter en setter methods hebben, maar ook direct een field gebruiken. De GetProc en SetProc velden zijn dus niet altijd zomaar simple function pointers, maar soms ook een adres naar een field. En de function pointers zijn ook niet allemaal van hetzelfde type, maar kunnen per property anders van signature zijn. Je kan ze dus niet allemaal naar een TProc typecasten. Het is dus vrij lastig code te maken die met alle situaties om kan gaan. En aangezien die functies er al zijn, zoals je al zag, hoef je je daar ook niet druk om te maken.

We adore chaos because we like to restore order - M.C. Escher