[Lazarus] Weird object variables access [SOLVED] - Delphi mode bug!
Michael Van Canneyt
michael at freepascal.org
Tue Oct 24 14:10:49 CEST 2017
On Tue, 24 Oct 2017, Giuliano Colla via Lazarus wrote:
> Il 23/10/2017 22:57, Mattias Gaertner via Lazarus ha scritto:
>> Check if 'Self' inside SendMessage is the right instance.
>
> The moral of the story is: in Delphi mode you can assign a procedure of
> object to a pointer, and the compiler doesn't complain, but it is wrong,
> because when you call your method through this pointer, the method is
> executed, but it's unaware of the data space of the object it belongs
> to, even if it's called from another method of the same object! If the
> method doesn't access variables of the object, everything appears to
> work, but if it does the program simply crashes.
>
> I will try to see if the same occurs also in Delphi, to understand if
> it's a Delphi bug or an fpc bug.
A valid method can never be stored in a pointer, since the former is actually
2 pointers (method/data) and the latter is just 1 pointer.
That the assignment is valid is Delphi compatible: only the procedure
address is copied.
Michael.
More information about the Lazarus
mailing list