将JNI类型转换为Native类型

 2023-01-21    276  

问题描述

虽然有关于将jstring转到本机字符串(string nativeString = env->GetStringUTFChars(jStringVariable, NULL);)的文档,但我找不到一个示例,该示例会将jboolean转换为bool或a jint到.

谁能建议如何实现这一目标?

将JNI类型转换为Native类型

推荐答案

您只需要使用C样式铸件铸造jint int.对于jboolean到bool(如果您使用的是C99 bool type)或uint8_t(如果您使用的是std int类型)或unsigned char.

打开$NDK_ROOT/platforms/android-8/arch-arm/usr/include/jni.h,您会看到jint,jboolean等,只是typedefs.

其他推荐答案

铸造jboolean(可能只包含值JNI_FALSE或JNI_TRUE)到本机bool我会使用类似的东西:

(bool)(jboolean == JNI_TRUE)

如果也许jboolean不是来自JVM,则测试jboolean != JNI_FALSE可能被认为是更安全的.

其他推荐答案

相同的问题 – 固定.就我而言,我使用的是OpenFrameWorks,因此我不知道这是否适用于非openframeworks项目(尚未测试).但是,似乎外部函数中的前两个参数始终是” env”和” thiz”,并且需要针对每个新的外部功能明确定义这些参数.

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 );
}


}

以上所述是小编给大家介绍的将JNI类型转换为Native类型,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26325.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。