> On Sep 15, 2022, at 12:28 PM, Sven Barth <pascaldra...@googlemail.com> wrote:
> 
> As mentioned elsewhere function references are in fact interfaces. And you 
> can't retrieve a method pointer to a interface function, cause relying on 
> that would result in either memory leaks or premature release of the 
> interface, because TMethod only contains a Pointer for the Data field that 
> does not support managed types.
> 
> You can get a reference to the raw interface by doing this however:
> 
> === code begin ===
> 
> var
>   proc: reference to procedure;
>   i: IUnknown;
> begin
>    i := IUnknown(PPointer(@proc)^);
> end.
> 
> === code end ===
> 
> Though I don't know what you hope to achieve with this...

Ok so what’s happening is I had a deferred dispatch library that used many 
different callback types and now I want to unify it using references. Problem 
is, with the old design I used “of object” types so I was able to get the 
target class and use it do to things like cancel all actions that were 
associated with a particular class. 

I don’t understand how memory loss could be in play. If the function reference 
is stored and not freed it should have the information needed to invoke a 
method and in theory you should be able to retrieve it anytime, providing the 
interface had a public method for this (which would be a nice extension to 
add). How is that not correct?

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to