Michael Van Canneyt wrote:


On Sat, 30 May 2009, Robert wrote:

i := pp.f();  // EVariantTypeCastError (i:Integer or LongInt)

This needs investigation.


Found, that the origin of this casting problem is obviously, that TPythonVariantType.CastTo is not called by FPC, like it is in Delphi. In variants.pp there are some ´FindCustomVariantType ... Handler.CastTo´s , but it does not work as it should?

When I switch VarPyth into Atom-Mode by the following {$IFDEF FPC}, this problem can be worked around for now. But some things are limited then....


### VarPyth.pas ###############
constructor TPythonData.Create(AObject: PPyObject);
begin
 PyObject := AObject;  // property; does XIncRef
 {$IFDEF FPC}
//#TODO FreePascal Variants don't late-invoke our TPythonVariantType.CastTo/.Copy, // when the living Python object inside the Variant needs to be converted to a
 // static type.  ( v := pymod.a;  intvar := v; boolvar := v; ... )
// As of 2009May31, v2.2.2 / v2.3.1. So we have to use VarPyth in Atom-Mode, // and then a sterotype conversion to a Pascal type is tried as soon as the // variant receives the Python object (without knowing the target type / best
 // conversion.
// Remove this behavior as soon as we have full support for late-casting in FPC.
 fPythonAtomCompatible := True;
 {$ELSE}
 fPythonAtomCompatible := False;
 {$ENDIF}
end;



Robert


_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to