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