How to execute a method by name (Views: 28)
Problem/Question/Abstract: I have a reference to a TMethod (with its Data and Code pointers) and would like to execute the associated method. Does anyone know how I can do this? Answer: Here is an example that executes a method by name. Note that the method to be called (in the example that is SomeMethod) must be declared as published, otherwise MethodAddress wil return nil. { ... } type PYourMethod = ^TYourMethod; TYourMethod = procedure(S: string) of object; procedure TMainForm.Button1Click(Sender: TObject); begin ExecMethodByName('SomeMethod'); end; procedure TMainForm.ExecMethodByName(AName: string); var PAddr: PYourMethod; M: TMethod; begin PAddr := MethodAddress(AName); if PAddr <> nil then begin M.Code := PAddr; M.Data := Self; TYourMethod(M)('hello'); end; end; procedure TMainForm.SomeMethod(S: string); begin ShowMessage(S); end; |