[fpc-pascal] Class Memory Table Size

Daniël Mantione daniel.mantione at freepascal.org
Tue May 8 08:05:21 CEST 2007



Op Tue, 8 May 2007, schreef Andrew Haines:

> Hi,
> 
> In this page
> http://www.freepascal.org/docs-html/prog/progsu139.html#x189-1950008.2.13
> in the VMT +0 is the "Size of object type data" and the same number in
> the negative is stored at +4. How important is it that this number is
> not changed after the object is created? I want to store a number
> especially at +0. What is stored after that does not matter.

These fields are used by several RTL routines that operate on classes, 
which will  no longer function correctly. For details we need to search 
the source code.

> The reason for this is, I want to trick gtk into thinking that a TObject
> is really a GObject. This is where the TypeID for GType's are stored. I
> know this won't work for most GObject's, but I am only implementing this
> for a GInterface which is looked up by the TypeID, so that is all I need.
> 
> I've tested this and it is working. But what horrible things can happen?

I think it is much better to use objects for this rather than classes. A 
construction like this:

type   gobject=object
         gobject_typeid:...;
       end;

       gobject_child=object(gobject)
         constructor init;
         destructor done;virtual;
       end;

... will exactly to what you want: the gobject_typeid is at offset 
0 while the size and vmt index are stored after that.

Daniël


More information about the fpc-pascal mailing list