[fpc-pascal] Read Field names from VMT

Amir at Aavani.net Amir at Aavani.net
Fri Feb 2 06:57:54 CET 2024


I see... The trick was to define TMyClass!

Thanks!


On 2/1/24 02:19, Michael Van Canneyt via fpc-pascal wrote:
>
>
> On Wed, 31 Jan 2024, Amir--- via fpc-pascal wrote:
>
>>
>>> Without more info (declaration of ChildTClass, declaration of the 
>>> constructor
>>> of that class etc), it is not possible to comment.
>>>
>>> We need a complete compilable code sample to provide you with more 
>>> insight.
>>>
>> Please have a look at the attachment.
>
> The constructor of TObject is not virtual, in difference with the 
> destructor.
>
> Given the definitions
>
>   ChildObj: TObject;
>   ChildTClass: TClass;
>
> The following statement
>
>   ChildObj := ChildTClass.Create;
>
> will always use the TObject.Create, since it is not virtual.
>
> In general, you cannot use TObject for this kind of thing.
>
> For this to work, you need to create a descendent of TObject with a 
> virtual
> constructor (call it TMyObject) of known signature, and do
>
>   ChildObj: TMyObject;
>   ChildTClass: TMyClass; // class of TMyobject
>
> then
>
>   ChildObj := ChildTClass.Create;
>
> will take the correct overridden constructor.
>
> Your code is also incomplete in the sense that it will only work for 
> classes
> with a constructor without arguments. If a overloaded constructor 
> exists which takes arguments (like TComponent), it will not be called 
> and the class will not be instantiated correctly.
> But maybe that will not be your use-case.
>
> I attached a version of your program that works and has no memleaks.
>
> Michael.
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal



More information about the fpc-pascal mailing list