我有一个包含的 dll文件 以下功能:
unsigned char * EncodingData(short Data[], int Length);
我想称之为原生方法 在java中。所以我创造了一个 wrapper dll 包含对应的follwing函数 以上功能
JNIEXPORT jcharArray JNICALL Java_com_common_FilterWrapper_EncodingData (JNIEnv * env, jclass cls, jshortArray shortData, jint len)
现在我打电话给上面的 JNI 函数来自java,它正在发生 成功召集。
问题:
我想从包装器dll的函数中调用 dll文件的函数,但我不知道如何转换以下内容:
jshortArray 指向短[] (将数据传递给 dll文件的功能,预计短[ ] 而不是 jshortArray )
unsigned char 到 jcharArray (将值返回给java函数)
注意:包装器dll是用VC ++编写的
答案 0 :(得分:0)
unsigned short tempElem;
jshort* test = env->GetShortArrayElements(shortData, NULL);
int size = (sizeof(test) / sizeof(*test)) - 1;
for (int i = 0; i < size; i++) {
tempElem = (unsigned short)test[i]);
printf("[%d] test %u || size = %d\n", i, tempElem, size);
}
答案 1 :(得分:0)
使用env-> GetShortArrayElements,例如,如果您的jshortArray称为sdata_jshort,则short *指针称为short_data_c_pointer,然后
short_data_c_pointer = env-> GetFloatArrayElements(sdata_jshort,0);
答案 2 :(得分:-1)
总结:
首先,我们提供一组功能 复制原始数组元素 在Java数组的一段和。之间 本机内存缓冲区。使用这些 函数,如果本机方法需要 只能访问少数 大数组中的元素。
其次,程序员可以使用另一个 要检索的函数集 固定版本的数组元素。 请记住,这些功能可能会 要求Java VM执行存储 分配和复制。是否这些 函数实际上是复制数组 取决于VM实现