2011-04-07 689 views
1

我有一个包含 以下功能的dll文件JNI - 如何jshortArray转换为短*

unsigned char * EncodingData(short Data[], int Length); 

我想打电话给该机方法在Java中 。所以,我创建了一个 包装DLL包含对应 上述功能

JNIEXPORT jcharArray JNICALL Java_com_common_FilterWrapper_EncodingData (JNIEnv * env, jclass cls, jshortArray shortData, jint len) 

的follwing功能现在,我从Java调用上述JNI 功能,它正在 成功调用。

问题:

我想打电话从包装DLL函数dll文件的功能,但我不知道如何转换如下:

  • jshortArrayshort [](将数据传递给DLL文件的功能其被期待短[]和不jshortArray

  • 无符号字符jcharArray(返回值返回到Java函数)

注:包装DLL是用VC++编写的

回答

-1

这包括在JNI documentation

总结:

首先,我们提供的一组功能 复制基本数组元素 一个Java阵列的段和 天然存储器缓冲器之间。如果本地方法需要 访问大数组中的少数几个 元素,请使用这些 函数。其次,编程人员可以使用另一组函数来检索数组元素的固定版本 。 请记住,这些函数可能需要Java VM执行存储分配和复制 。无论这些 功能其实阵列 取决于复制的虚拟机实现

+0

你没有回答这个问题... – Patrick 2014-03-06 03:06:53

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