#include "jni_glue.h" namespace bbJNI{ bbString JStringToString( JNIEnv *env,jstring jstr ){ const char *cstr=env->GetStringUTFChars( jstr,0 ); bbString str=bbString::fromCString( cstr ); env->ReleaseStringUTFChars( jstr,cstr ); return str; } jstring StringToJString( JNIEnv *env,bbString str ){ int n=str.utf8Length()+1; char *buf=new char[n]; str.toCString( buf,n ); jstring jstr=env->NewStringUTF( buf ); return jstr; } jvalue *makeArgs( JNIEnv *env,bbArray args ){ jvalue *jargs=new jvalue[args.length()]; memset( jargs,0,sizeof( jvalue ) * args.length() ); jvalue *jarg=jargs; for( int i=0;i() ){ bbBool val=arg.get(); jarg->z=val; }else if( type==bbGetType() ){ bbInt val=arg.get(); jarg->i=val; }else if( type==bbGetType() ){ bbString str=arg.get(); int n=str.utf8Length()+1; char *buf=new char[n]; str.toCString( buf,n ); jstring jstr=env->NewStringUTF( buf ); jarg->l=jstr; }else{ bbRuntimeError( "Can't evaluate JNI method param of typ:"+type->toString() ); } ++jarg; } return jargs; } void CallVoidMethod( JNIEnv *env,jobject obj,jmethodID methodID,bbArray args ){ jvalue *jargs=makeArgs( env,args ); env->CallVoidMethodA( obj,methodID,jargs ); delete[] jargs; } bbBool CallBooleanMethod( JNIEnv *env,jobject obj,jmethodID methodID,bbArray args ){ jvalue *jargs=makeArgs( env,args ); bbBool r=env->CallBooleanMethodA( obj,methodID,jargs ); delete[] jargs; return r; } void CallStaticVoidMethod( JNIEnv *env,jclass clazz,jmethodID methodID,bbArray args ){ jvalue *jargs=makeArgs( env,args ); env->CallStaticVoidMethodA( clazz,methodID,jargs ); delete[] jargs; } bbBool CallStaticBooleanMethod( JNIEnv *env,jclass clazz,jmethodID methodID,bbArray args ){ jvalue *jargs=makeArgs( env,args ); bbBool r=env->CallStaticBooleanMethodA( clazz,methodID,jargs ); delete[] jargs; return r; } }