Michael Van Canneyt wrote on Wed, 25 May 2016:

On Wed, 25 May 2016, Jonas Maebe wrote:

Sven Barth wrote on Wed, 25 May 2016:

An method pointer is always automatically constructed by the compiler
consisting of the address of the method (here IFPReportFilter.RenderReport)
and the instance that method belongs to (in this case the FReportFilter),
so this will indeed work without problems.
The question however is whether it is guaranteed to keep working and isn't
merely the use of an implementation detail...

It works by design. I can't think of a reason why it would stop working.

What is the self in case of an interface that is not in a FPC program ?

In all cases we pass the unadjusted interface pointer. Such an interface pointer is always a pointer to an interface VMT pointer/address.

The interface method is required to be able to reconstitute the interface's self pointer (the start of the instance that implements this interface) from that. In both FPC and in regular COM, that generally happens by some kind of stub code that is created for every interface method implemented by a class, which subtracts the offset of the interface's VMT in that specific class' instance layout from the passed self pointere.


Jonas
_______________________________________________
fpc-pascal maillist  -  [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to