get class of procedure variable

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

get class of procedure variable

Free Pascal - General mailing list
In the example below "callback" is assigned to a method of "obj", but is it possible to get the class back from the variable? In the pseudo code I would expect .GetClass to return "obj". I think "of object" must be a record which keep both the class and method pointer but I don't know how to access it.

 
  type TCallback = procedure of object;
  var
    callback: TCallback;
    obj: TObject;
  begin
    callback := obj.SomeMethod;
 
    // get the class which callback is assigned to
    if callback.GetClass = XXX then
      ;

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  [hidden email]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: get class of procedure variable

Michael Van Canneyt


On Fri, 29 May 2020, Ryan Joseph via fpc-pascal wrote:

> In the example below "callback" is assigned to a method of "obj", but is it possible to get the class back from the variable? In the pseudo code I would expect .GetClass to return "obj". I think "of object" must be a record which keep both the class and method pointer but I don't know how to access it.
>
>
>  type TCallback = procedure of object;
>  var
>    callback: TCallback;
>    obj: TObject;
>  begin
>    callback := obj.SomeMethod;
>
>    // get the class which callback is assigned to
>    if callback.GetClass = XXX then

I think what you're looking for is:

if TMethod(CallBack).Data=XXX then

Michael.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: get class of procedure variable

Michael Van Canneyt


On Fri, 29 May 2020, Michael Van Canneyt wrote:

>
>
> On Fri, 29 May 2020, Ryan Joseph via fpc-pascal wrote:
>
>> In the example below "callback" is assigned to a method of "obj", but is it
> possible to get the class back from the variable? In the pseudo code I would
> expect .GetClass to return "obj". I think "of object" must be a record which
> keep both the class and method pointer but I don't know how to access it.
>>
>>
>>  type TCallback = procedure of object;
>>  var
>>    callback: TCallback;
>>    obj: TObject;
>>  begin
>>    callback := obj.SomeMethod;
>>
>>    // get the class which callback is assigned to
>>    if callback.GetClass = XXX then
>
> I think what you're looking for is:
>
> if TMethod(CallBack).Data=XXX then

Small addendum, if you're looking for the class (i.e. the type) then that
would be:

   if TObject(TMethod(CallBack).Data).Classtype=XXX then

TMethod is part of the system unit.
   https://www.freepascal.org/docs-html/rtl/system/tmethod.html

Michael.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: get class of procedure variable

Free Pascal - General mailing list
In reply to this post by Michael Van Canneyt


> On May 29, 2020, at 2:15 PM, Michael Van Canneyt <[hidden email]> wrote:
>
> I think what you're looking for is:
>
> if TMethod(CallBack).Data=XXX then

TMethod is exactly what I was looking for. Thank you Michael.

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  [hidden email]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal