我问了一个关于char to jsstring
的类似问题...但是现在我遇到了int to jlongArray
的问题,我无法弄清楚:/
我收到以下错误:
Error:(290, 10) error: cannot initialize a variable of type 'int *' with an rvalue of type 'jlong *' (aka 'long long *')
在这一行:
JNIEXPORT void Java_de_meetspot_ndktest_MainActivity_LoadPlayerA(JNIEnv *javaEnvironment, jobject self, jstring audioPath, jlongArray offsetAndLength) {
const char* audio = javaEnvironment->GetStringUTFChars(audioPath, JNI_FALSE);
int* params = javaEnvironment->GetLongArrayElements(offsetAndLength, JNI_FALSE);
example->LoadPlayerA(audio, params);
}
这是宣言:
void LoadPlayerA(const char *audioPath, int *params);
有人可以帮助我吗?
答案 0 :(得分:2)
long
是a signed 64-bit integer type。另一方面,C ++ int
is only defined “保证宽度至少为16位”。
让我们假设您的int
是32位(这是一种非常常见的情况):所以现在你有一个指向一堆数据的指针,其中每个元素都是64位,你正在尝试将它传递给期望指向32位数据的函数。即使编译器已经允许,这显然也不会起作用。
为您提供的一些选择:
LoadPlayerA
以获取jlong*
或int64_t*
(并更改LoadPlayerA
中依赖于int
类型的传入数据的任何代码。 int[]
而不是long[]
传递,并更改LoadPlayerA
以获取jint*
或int32_t*
。< / LI>
int
类型的数组/向量,并将数据从jlong
转换为int
,然后再将其传递给LoadPlayerA
。答案 1 :(得分:0)
感谢Michael :) ..
这是我如何做到的:
jlong *longParams = javaEnvironment->GetLongArrayElements(params, JNI_FALSE);
int arr[6];
for (int n = 0; n < 6; n++) arr[n] = longParams[n];
javaEnvironment->ReleaseLongArrayElements(params, longParams, JNI_ABORT);