我正在尝试通过JNI将c的布尔数组返回到javaJNIEXPORT jbooleanArray JNICALL Java_NetworkGUI_passwordProtected(JNIEnv*env, jobject obj){ bool passwordProtected[3]; passwordProtected = {true, false, false} jbooleanArray passwords; passwords = (*env) -> NewBooleanArray(env, 3); (*env)-> SetBooleanArrayRegion(env, passwords, 0, 3, passwordProtected); return (passwords);}而且我不断收到这个错误[警告]从不兼容的指针类型传递'(* env)-> SetBooleanArrayRegion'的参数5。最后一个参数应该是“ const jboolean * buf”,但我希望能够将常规布尔数组复制到jboolean数组。 最佳答案 而且我不断收到这个错误        [警告]传递'(* env)-> SetBooleanArrayRegion'的参数5    指针类型不兼容。      最后一个参数应该是“ const jboolean * buf”,警告告诉您,要传递的数组的元素类型bool与jboolean不兼容,因为这两种类型恰好在您的环境中定义。这不是您可以忽略的问题,至少不是没有更多细节。当您传递以这种方式不匹配的参数时,没有理由期望正在调用的函数将按预期工作。  但我想要  以便将常规布尔数组复制到jboolean数组。但这不是你在做什么。您试图从jbooleanarray数组初始化jboolean(不是“ bool数组”)。如果bool和jboolean确实不兼容,则无法通过任何可用的JNI函数来实现。但是您可以通过jbooleanarray数组在jboolean中设置值,如下所示:jboolean passwordProtected[] = {JNI_TRUE, JNI_FALSE, JNI_FALSE};jbooleanArray passwords;passwords = (*env)->NewBooleanArray(env, 3);(*env)-> SetBooleanArrayRegion(env, passwords, 0, 3, passwordProtected);如果不是从本地声明一个数组,而是从某个外部源获取您的bool数组,那么您就不能只切换到jboolean,那么最好的选择可能是通过,通过适当的循环复制值,然后以jboolean结尾:bool passwordProtected[] = {true, false, false};jbooleanArray passwords = (*env)->NewBooleanArray(env, 3);jboolean *password_elements = (*env)->GetBooleanArrayElements(env, passwords, NULL);for (int i = 0; i < 3; i++) { password_elements[i] = passwordProtected[i] ? JNI_TRUE : JNI_FALSE;}(*env)->ReleaseBooleanArrayElements(env, passwords, password_elements, 0);或者,使用jbooleanarray / GetBooleanArrayElements或ReleaseBooleanArrayElements / Get,因为它最符合您的需求。关于java - 将 boolean 数组从C返回到Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51387073/
10-10 19:29