On Thu, 10 Sep 2009 14:25:26 +0000, Desmond Coertzen <patrolliekapt...@gmail.com> wrote: > I have done some horrible code where I needed to know the following: > > If TSomeProc = procedure(....), then is it easy to determine or set entry > vector of ThatProc: TSomeProc by stating ThatProc := > @ProcWhereTheCodeLives_InTheCodeSegment; > > It gets more difficult when you work with TSomeClassProc = procedure(....) > of object, because two parts are referenced here: 1) The entry vector where > the code lives, 2) The heap address where the object struct lives. (Known > as > the Self variable in a procedure of object) > > I have worked out which pointer of the two pointers belongs to the code and > which to the instance with a trial. With a move operation, I was able to > manipulate the two pointers, specifically to determine the address of the > instance. > > The @ operator only gives you access to the procedure part. Is there, or > will there be, another operator to give you access to the instance address? >
You can use the TMethod record to access the fields: {$mode objfpc} type tc=class procedure p; end; procedure tc.p; begin end; var c : tc; begin writeln(hexstr(tmethod(@c.p).data)); writeln(hexstr(tmethod(@c.p).code)); c:=tc.create; writeln(hexstr(tmethod(@c.p).data)); writeln(hexstr(tmethod(@c.p).code)); end. _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel