Hi Petrus,

On Sat, 28 Jan 2012, Petrus Hyvönen wrote:

Thanks for the prompt reply,

Yes, no difference, it treats it as an int in that case.

"InvalidArgsError: (<type 'TLE'>, '__init__', (5555, 65, 2000, 1, 'A', 0, 1,..."

In the error message, it seems like int,float,string are printed
without a type but others are printed with a <type>?

According to the source code of _parseArgs in functions.cpp, a char must be passed with one-character unicode string:

          case 'C':           /* char */
          {
              if (array)
              {
                  if (arg == Py_None)
                      break;
                  if (PyObject_TypeCheck(arg, PY_TYPE(JArrayChar)))
                      break;
              }
              else if (PyUnicode_Check(arg) && PyUnicode_GET_SIZE(arg) == 1)
                  break;
              return -1;
          }

Please, try passing u'A' instead of just 'A' to see if that works.

I can't think of a reason right now why this was written that way but it was intentional as the part that extracts the character also expects a one-character unicode string and has no code to support a plain string.

The reasoning was probably that a jchar is a unicode character and thus a unicode string must be required but I don't see why it couldn't be extended to supporting also a one-character byte string (a plain str in python 2.x).

Andi..



Regards
/Petrus


On Sat, Jan 28, 2012 at 6:26 PM, Andi Vajda <va...@apache.org> wrote:

On Jan 28, 2012, at 9:15, Petrus Hyvönen <petrus.hyvo...@gmail.com> wrote:

Hi all,

I have a problem which I think is due to typecasting,

I have wrapped a function that has following input types:

TLE(jint, jchar, jint, jint, const ::java::lang::String &, jint, jint,
const ::org::orekit::time::AbsoluteDate &, jdouble, jdouble, jdouble,
jdouble, jdouble, jdouble, jdouble, jdouble, jint, jdouble);

I have been trying all kind of stuff to call it from python, but get

InvalidArgsError: (<type 'TLE'>, '__init__', (5555, JArray<char>u'U',
2000, 1, 'A', 0, 1, <AbsoluteDate: 2012-01-26T11:00:00.000>,
0.0011421088155377755, 1.5670255537196003e-12, 0.0, 0.0,
0.7059490305174144, 5.583519461969352, 4.184206970170655,
0.7002697291314248, 0, 0.0007279))

(in different kind of fashion depending on how far my tests has gone)

My feeling now is that there is something with the input type jchar
and java String. Both are actually single characters that I want to
send, but in python I use (as a start) 'A' syntax for both. Do I need
to typecast it to a jchar? I tried in the example above to cast it
using JArray_char but no success.

How does JCC differ between when i want to send 'A' as a char and as a
string? or does it try it as both?

Have you tried sending 'A' as 65, its ascii code ? ord('A').

Andi..


Many thanks for any comment,
Best regards
/Petrus



--
_____________________________________________
Petrus Hyvönen, Uppsala, Sweden
Mobile Phone/SMS:+46 73 803 19 00

Reply via email to