Michael A. Hess wrote 53 lines
Greetings,
Should I be able to call a class method by passing a pointer to that
method and then running the method by referencing the pointer.
The following is a crude layout and not meant to be compiled and tested.
type
TMyClass = class(some parent)
.
.
procedure Stuff;
procedure Setup;
end;
TProcedure = procedure;
procedure PlainProcedure;
begin
... does stuff
end;
procedure TMyClass.Stuff;
begin
... does stuff
end;
procedure TMyClass.Setup;
var
proc : Pointer;
begin
proc := @PlainProcedure;
// now try and call the plain procedure
TProcedure(proc);
// This works, does stuff, and returns correctly.
proc := @Stuff;
// now try and call the class procedure
TProcedure(proc);
// it called Stuff and did whatever was in it but gives an
// access violation when it attempts to return.
end;
Should the above type of scenerio, calling a class method by pointer, be
able to work or am I trying to do something that is normally illegal?
Definitely illegal; TMyClass.Stuff is a procedure OF OBJECT;
So it should be
type
TMyClass = class(some parent)
.
.
procedure Stuff;
procedure Setup;
end;
TProcedure = procedure;
TObjProcedure = Procedure of object;
procedure PlainProcedure;
begin
... does stuff
end;
procedure TMyClass.Stuff;
begin
... does stuff
end;
procedure TMyClass.Setup;
var
proc : Pointer;
stuffproc : TObjProcedure;
begin
proc := @PlainProcedure;
TProcedure(proc);
Stuffproc := Self.stuff;
StuffProc; <<-- Procedure of object, NOT simply procedure.
end;
---------------------------------------------------------
With a 'procedure of object' a pointer to an instance also must be passed. This is not the case with a simple procedure.
I thought you would have known this ? As a experienced Delphi programmer ? :-)
Michael.