From: Shields, D. P.(Technology) <Dan...@gs...> - 2007-06-19 12:27:39
|
I've made some progress and now have an "in" typemap (thanks Michael): %typemap(in) const boost::posix_time::ptime& { if(!$input) { SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null"); return $null; } jclass cls =3D jenv->FindClass("java/util/Date"); jmethodID mid =3D jenv->GetMethodID(cls, "getTime", "(V)J"); long t =3D jenv->CallLongMethod($input, mid); *($1) =3D from_time_t(t / 1000); } %typemap(jni) const boost::posix_time::ptime& "jobject" %typemap(jtype) const boost::posix_time::ptime& "java.util.Date" %typemap(jstype) const boost::posix_time::ptime& "java.util.Date" %typemap(javain) const boost::posix_time::ptime& "$javainput" The corresponding "out" typemap compiles in C++ but fails in java: %typemap(out) Viking::field<boost::posix_time::ptime> { $result =3D 0; bool valid =3D $1.valid; if (valid) { long t =3D to_time_t($1); jclass cls =3D jenv->FindClass("java/util/Date"); jmethodID mid =3D jenv->GetMethodID(cls, "<init>", "(J)V"); jobject jdate =3D jenv->AllocObject(cls); jenv->CallVoidMethod(jdate, mid, t * 1000); $result =3D jdate; } } %typemap(jni) Viking::field<boost::posix_time::ptime> "jobject" %typemap(jtype) const boost::posix_time::ptime& "java.util.Date" %typemap(jstype) const boost::posix_time::ptime& "java.util.Date" %typemap(javaout) Viking::field<boost::posix_time::ptime> { return $jnicall; } I'm guessing that the jni/jtype/jstype typemaps are incorrect. A search of the examples and google have turned up nothing similar. Could someone kindly point me at an example. For completeness, the error from javac is: com/gs/viking/ReportAcknowledgement.java:114: incompatible types found : long required: com.gs.viking.PtimeField public PtimeField reportTime() { return vikingJNI.ReportAcknowledgement_reportTime__SWIG_0(swigCPtr, this); } =20 ^ Thanks, Daniel. |