[fpc-pascal] Illegal type conversion: "LongInt" to "TObject"
Michael Van Canneyt
michael at freepascal.org
Thu Jan 28 09:30:19 CET 2010
On Thu, 28 Jan 2010, Graeme Geldenhuys wrote:
> Hi,
>
> If I compile the code snippet shown below in 'mode delphi' it works fine.
> If I try and compile it with 'mode objfpc' it fails with a compiler error
> as shown here:
>
> /home/graemeg/programming/personal/fpginstall/src/rttihelpers.pas(156,43)
> Error: Illegal type conversion: "LongInt" to "TObject"
>
>
> -----------------------------------------
> // RTTI extension that allows "property paths".
> // eg: tiSetProperty(MyObject, 'User.Address.City', 'Cape Town');
> //
> procedure tiSetProperty(const AObject: TObject; const APropPath: string;
> const APropValue: Variant);
> var
> LPropInfo: PPropInfo;
> LValue: Variant;
> begin
> Assert(APropPath <> '', 'APropPath not assigned');
> LPropInfo := tiGetPropInfo(AObject.ClassType, APropPath, @AObject);
> if Assigned(LPropInfo) and Assigned(LPropInfo^.SetProc) then
> begin
> case tiGetTypeInfo(LPropInfo)^.Kind of
> tkClass:
> SetObjectProp(AObject, LPropInfo, TObject(Integer(APropValue)));
> // ERROR OCCURS HERE -------^
>
> tkEnumeration,tkBool:
> [...snip...]
> -----------------------------------------
>
>
> In both compiler modes, I am using the same FPC 2.4.0 compiler under a
> 64bit Linux system. What is the correct way to resolve this error in
> compiler mode 'objfpc'?
>
> Changing the offending line as shown below fixes the compiler error, but
> I'm not 100% sure if that is what I'm supposed to do. I guessing here. :-(
>
>
> SetObjectProp(AObject, LPropInfo, TObject(PtrUInt(APropValue)));
This is correct _if_ APropvalue is a 64-bit integer on a 64-bit system.
Better dump the whole procedure. Using variants is inviting problems.
Michael.
More information about the fpc-pascal
mailing list