Convert JNI types to Native types
Solution 1:
You just need to cast jint
to int
using C style casts. Same for jboolean
to bool
(if you're using C99 bool
type) or to uint8_t
(if you're using std int types) or to unsigned char
.
Open $NDK_ROOT/platforms/android-8/arch-arm/usr/include/jni.h
and you'll see jint
, jboolean
etc are just typedef
s.
Solution 2:
To cast a jboolean
(which may only contain the values JNI_FALSE
or JNI_TRUE
) to a native bool
I would use something like this :
(bool)(jboolean == JNI_TRUE)
If perhaps the jboolean
isn't coming from the JVM, then testing for jboolean != JNI_FALSE
might be considered safer.
Solution 3:
Same issue–fixed. In my case I'm using openFrameworks so I don't know if this applies to non-openFrameworks projects (haven't tested). However, it appears that the first two arguments in an external function are always "env" and "thiz" and these need to be defined explicitly for each new extern function.
extern "C"{
// casts the variable properly
void Java_com_package_JavaClass_someFunction( JNIEnv* env, jobject thiz, jboolean yourBool ){
myTestApp->someFunction( (bool) yourBool );
}
// "yourBool" will always be "1" because its taking the spot of "thiz" which is not null
void Java_com_package_JavaClass_someFunction( JNIEnv* env, jboolean yourBool ){
myTestApp->someFunction( (bool) yourBool );
}
// "yourBool" will always be "1" because its taking the spot of "env" which is not null
void Java_com_package_JavaClass_someFunction( jboolean yourBool ){
myTestApp->someFunction( (bool) yourBool );
}
}