Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNI char[](char数组)的方法描述符是什么?_Java_Android_Java Native Interface - Fatal编程技术网

Java JNI char[](char数组)的方法描述符是什么?

Java JNI char[](char数组)的方法描述符是什么?,java,android,java-native-interface,Java,Android,Java Native Interface,我的JAVA类代码片段。我想使用JNI从我的C文件访问getReg_chal()方法: public char[] getReg_chal() { return reg_chal; } 我的C文件正在执行一些jni操作: mid = (*env)->GetMethodID(env, info, "getReg_chal()", "()I"); mid = (*env)->GetMethodID(env, info, "getReg_chal()", ***

我的JAVA类代码片段。我想使用JNI从我的C文件访问getReg_chal()方法:

public char[] getReg_chal() {
        return reg_chal;
    }
我的C文件正在执行一些jni操作:

mid = (*env)->GetMethodID(env, info, "getReg_chal()", "()I");

mid = (*env)->GetMethodID(env, info, "getReg_chal()", ***);
我想知道我的char[]的方法描述符。写“()I”会给我一个虚假的方法描述符错误,因为()I用于Int。我应该填写什么*。
请帮帮我。提前感谢。

方法签名将是“
()[C

您可以阅读有关详细信息和详细信息

要使用方法id调用该方法,只需编写如下代码

jobject obj = ... // This is the object you want to call the method on
jcharArray arr = (jcharArray) (*env)->CallObjectMethod(env, obj, mid);
int count = (*env)->GetArrayLength(env, arr);
jchar* chars = (*env)->GetCharArrayElements(env, arr, 0);
// Here, "chars" is a C pointer to an array of "count" characters. It's NOT
// going to be 0-terminated, so be careful! Here's where you would do your
// logging or whatever. One possible way to do this is by turning the `jchar`
// array into a proper 0-terminated character string:
char * message = malloc(count + 1);
memcpy(message, chars, count);
message[count] = 0;
LOGD("NDK:LC: [%s]", message);

// When you're done you must call this!
(*env)->ReleaseCharArrayElements(env, arr, chars, 0);

更改方法签名后,伪方法错误消失,但GetMethodId函数无法识别JAVA中的getReg_chal()。其抛出错误:DEBUG/dalvikvm(1365):GetMethodId:找不到方法:Lcom/rohan/RegisterInfo;。getReg_chal():()[C..你能帮我一下吗。提前谢谢。我以前没有注意到;括号不应该在那里。参数只是方法名“getReg_chal”,没有括号。谢谢欧内斯特指出这一点。你能帮我做最后一件事吗。我想存储并打印getReg_chal()的值返回。您可以帮助我如何将该值存储在我的C文件中。然后,如果可能的话,在JNI中使用LOGD记录该值:谢谢您的回答。我在查看输出时仍然面临问题。我们需要将jchar转换为char吗?还是其他什么。我的代码:int count=(env)->GetArrayLength(env,arr);jchar chars=(*env)->getCharrayElements(env,arr,0);int i=0;for(i=0;ireleasechararaylements(env,arr,chars,0)请建议某种方法来正确获取日志。首先,该循环的迭代次数比允许的次数多一倍——条件必须是
i==count
,而不是
i