jstring
をネイティブ文字列(string nativeString = env->GetStringUTFChars(jStringVariable, NULL);
)に変換することに関するドキュメントはありますが、jboolean
をbool
に変換する例は見つかりません。 jint
からint
へ。
誰もこれを達成する方法を提案できますか?
Cスタイルのキャストを使用してjint
to int
をキャストするだけです。 jboolean
からbool
(C99 bool
タイプを使用している場合)またはuint8_t
(std int型を使用している場合)またはunsigned char
。
開いた $NDK_ROOT/platforms/Android-8/Arch-arm/usr/include/jni.h
とjint
、jboolean
などはtypedef
sにすぎません。
jboolean
(値はJNI_FALSE
またはJNI_TRUE
)ネイティブbool
に次のようなものを使用します。
(bool)(jboolean == JNI_TRUE)
おそらくjboolean
がJVMから来ていない場合は、jboolean != JNI_FALSE
はより安全であると考えられるかもしれません。
同じ問題-修正済み。私の場合、openFrameworksを使用しているので、これが非openFrameworksプロジェクトに当てはまるかどうかはわかりません(テストされていません)。ただし、外部関数の最初の2つの引数は常に「env」と「thiz」であり、これらは新しいextern関数ごとに明示的に定義する必要があるようです。
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 );
}
}
If(..)ステートメントで使用したい場合、これは変換せずに機能しています:
if (jboolean == true) {
return true;
} else {
return false;
}
奇妙なものはjchar
です。これはunsigned short
として定義され、コンパイル設定に応じて、wchar_t
と同等である場合とそうでない場合があります。基盤となるプラットフォームによっては、UTF8文字列を使用したほうがよい場合があります。少なくとも、これらはビット単位でASCII ASCII文字のサブセットに対して。
ただし、WindowsおよびMac OS/Cocoaでは、ネイティブのワイド文字列表現は正確にunsigned short
です。 Java文字列はそれに自然に適合します。