Convertir JNI types de types Natifs
Bien qu'il existe de la documentation concernant le tournage d'un jstring
à un natif de la chaîne (string nativeString = env->GetStringUTFChars(jStringVariable, NULL);
) je ne peux pas trouver un exemple qui vous permet de convertir un jboolean
à un bool
ou un jint
à un int
.
Quelqu'un peut-il suggérer comment cela est réalisé?
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin de jeter
jint
àint
à l'aide de C style jette. De même pourjboolean
àbool
(si vous utilisez C99bool
type) ou àuint8_t
(si vous êtes en utilisant std int types) ou àunsigned char
.Ouvrir
$NDK_ROOT/platforms/android-8/arch-arm/usr/include/jni.h
et vous verrezjint
,jboolean
etc, sont tout simplementtypedef
s.jint
à unint
et la réponse estjint
est juste untypedef
àint
ouint32_t
selon la plate-formeint
àjint
?De jeter un
jboolean
(qui peut ne contenir que les valeursJNI_FALSE
ouJNI_TRUE
) à un natifbool
je voudrais utiliser quelque chose comme ceci :Si peut-être le
jboolean
ne vient pas de la JVM, les tests pourjboolean != JNI_FALSE
peut être considéré comme plus sûr.boolean
passé de Java à C sera exactement 0 ou 1.jboolean
natif, et non pas l'inverse, donc, ce que l'API de Windows pourrait le faire ici, n'est pas pertinent.Même question–fixe. Dans mon cas, je suis en utilisant openFrameworks donc je ne sais pas si cela s'applique à la non-openFrameworks projets (n'ai pas testé). Cependant, il semble que les deux premiers arguments dans une fonction externe sont toujours "env" et "thiz" et ceux-ci doivent être définies de manière explicite pour chaque nouvelle fonction extern.
Le plus étrange est
jchar
. Il est défini commeunsigned short
, et en fonction de vos paramètres de compilation, qui peuvent ou peuvent ne pas être équivalent àwchar_t
. En fonction de votre plateforme sous-jacente, il peut être préférable de travailler avec des chaînes de caractères UTF8. Au moins ceux qui sont au niveau du bit équivalent ASCII pour le sous-ensemble de caractères ASCII.Sur Windows et Mac OS/Cacao, cependant, le natif de large représentation de chaîne est exactement
unsigned short
. Cordes de Java inscrivent naturellement dans cette.Si vous souhaitez les utiliser en si(..) l'énoncé, c'est de travailler pour moi, sans la conversion: