我想获得一个Java long[]
数组,并最终将其传递给需要在输入中使用powerEstimate
类型的函数const long
。
这是c ++中的函数定义:
void powerEstimate(const double rr_data[], const long timeRR_data[])
这是我用来获取Java long[]
数组的代码:
Java_com_example_matteofabris_stressmanagement_acquisition_SewAcquisition_powerEstimateNative(
JNIEnv *env, jobject, jdoubleArray rr_j_, jlongArray timeRR_j_) {
// GET
double* rr_j = env->GetDoubleArrayElements(rr_j_, NULL);
long* timeRR_j = env->GetLongArrayElements(timeRR_j_, NULL);
// TODO
powerEstimate(rr_j, timeRR_j)
在构建它时,出现此错误:
/Users/matteofabris/AndroidStudioProjects/StressManagement/app/src/main/cpp/native-lib.cpp:35:11: error: cannot initialize a variable of type 'long *' with an rvalue of type 'jlong *' (aka 'long long *')
long* timeRR_j = env->GetLongArrayElements(timeRR_j_, NULL);
有人可以解释为什么我得到这个错误以及如何解决吗? 预先感谢您的耐心配合。
答案 0 :(得分:1)
long
在Windows(看来是您的平台)上只有32位。但是,Java jlong
是64位。
您可以在本机代码中使用__int64*
代替long
,因为这也是jlong
中定义jni_md
的方式:
__int64* timeRR_j = env->GetLongArrayElements(timeRR_j_, NULL);
和
void powerEstimate(const double rr_data[], const __int64
timeRR_data[])
如果您无法更改powerEstimate
函数,则可以在Java端切换到int[]
,因为int
是32位,就像本地{{ 1}}。