作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我试图理解 jni,所以我开始破解 hellojni,然后遇到了这个问题。
我的 java 代码如下所示:
short[] buf = new short[16];
Log.d("hello", "before!");
write(buf, 0, 16);
我的 C 代码如下所示:
jint
Java_com_example_hellojni_HelloJni_write(JNIEnv* env, jshortArray buf, jint off, jint len)
{
char debug[1024];
int ii = 0;
jsize cbuflen = (*env)->GetArrayLength(env, buf);
sprintf(debug, "array length: %d", cbuflen);
LOGD(debug);
...
...
输出是:
数组长度:1079082088
为什么数组长度这么大?
最佳答案
你能展示你的整个 JNI 文件吗?您没有在 JNI 函数中声明目标对象。通常参数是 JNIEnv* env、jobject javaObject 等。这意味着您认为 jshortArray 实际上是指向 Java 对象的指针,这可以解释您得到的奇怪结果。
关于android - getArrayLength() 正在返回一个巨大的数字......,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6880021/
我试图理解 jni,所以我开始破解 hellojni,然后遇到了这个问题。 我的 java 代码如下所示: short[] buf = new short[16
尝试在我的一个 JNI C 文件中构建 Eclipse Android 项目时出现以下错误。 Method 'GetArrayLength' could not be resolved Method
我是一名优秀的程序员,十分优秀!