[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