我有一个public Type GetItemType()
{
CollectionView items = DataGrid.Items;
Type itemType = items.GetType // ...;
return itemType;
}
通过Java传递到C程序,我需要知道如何在C程序中使用该数组。如何将jcharArray
位转换为可以使用的内容(jcharArray
)?
我尝试使用JNI编写此代码
char bits[]
但它无法编译,说:
JNIEXPORT jint JNICALL Java_ex_NistStatisticalTestSuite_frequency (JNIEnv *env, jclass cls, jcharArray bits, jint jn) { printf("running frequency test"); int i; double f, s_obs, p_value, sum, sqrt2 = 1.41421356237309504880; int n=jn; char deletethis=(char)bits[0]; sum = 0.0; for ( i=0; i<n; i++ ) sum += 2*1-1; s_obs = fabs(sum)/sqrt(n); f = s_obs/sqrt2; p_value = erfc(f); return (jint)p_value; }
答案 0 :(得分:5)
您必须使用jni函数,至少有两种方法:
复制某个地区:
jchar buf[10];
(*env)->GetCharArrayRegion(env, bits, 0, 10, buf);
在JVM中锁定内存区域,然后访问它并最终释放:
jchar *carr;
carr = (*env)->GetCharArrayElements(env, bits, NULL);
if (carr == NULL) {
return 0; /* exception occurred */
}
//for (int i=0; i<10; i++) {
// do something with carr[i];
//}
(*env)->ReleaseCharArrayElements(env, bits, carr, 0);
这里我假设你的数组长度为10个元素。要找出数组中的元素数量,请使用GetArrayLength
jni函数。