Error:(289, 23)C++ / JNI / NDK - error: cannot initialize a parameter of type 'char *' with an lvalue of type 'jstring' (aka '_jstring *')
Error:(289, 23)C++ / JNI / NDK - error: cannot initialize a parameter of type 'char *' with an lvalue of type 'jstring' (aka '_jstring *')
我在使用 C++/Android (JNI) 时遇到错误,我完全不知道如何修复它..(我是 C++ 的新手)
Error:(289, 23) error: cannot initialize a parameter of type 'char *' with an lvalue of type 'jstring' (aka '_jstring *')
这一行的错误点
JNIEXPORT void Java_de_meetspot_ndktest_MainActivity_LoadPlayerA(JNIEnv *javaEnvironment, jobject self, jstring audioPath, jlongArray offsetAndLength) {
example->LoadPlayerA(audioPath, offsetAndLength);
}
在我的 class-声明中我有:
public: void LoadPlayerA(char *audioPath, int *params);android
有人能告诉我,我哪里错了吗?
这个错误很容易解释。在 example->LoadPlayerA(audioPath, offsetAndLength);
中,audioPath
的类型是 jstring
,但在您的 LoadPlayerA()
函数中,第一个参数是 char *audioPath
。编译器不知道如何将 jstring
转换为 char*
,因此您必须自己完成。
从 Jason Rogers answer here 借用,您可以将代码更改为:
JNIEXPORT void Java_de_meetspot_ndktest_MainActivity_LoadPlayerA(JNIEnv *javaEnvironment, jobject self, jstring audioPath, jlongArray offsetAndLength)
{
const char* audio = javaEnvironment->GetStringUTFChars(audioPath, JNI_FALSE)
example->LoadPlayerA(audio, offsetAndLength);
javaEnvironment->ReleaseStringUTFChars(audioPath, audio);
}
编辑:
我忘了包含 Release()
函数。这需要在完成数组后调用,否则会发生内存泄漏。
我在使用 C++/Android (JNI) 时遇到错误,我完全不知道如何修复它..(我是 C++ 的新手)
Error:(289, 23) error: cannot initialize a parameter of type 'char *' with an lvalue of type 'jstring' (aka '_jstring *')
这一行的错误点
JNIEXPORT void Java_de_meetspot_ndktest_MainActivity_LoadPlayerA(JNIEnv *javaEnvironment, jobject self, jstring audioPath, jlongArray offsetAndLength) {
example->LoadPlayerA(audioPath, offsetAndLength);
}
在我的 class-声明中我有:
public: void LoadPlayerA(char *audioPath, int *params);android
有人能告诉我,我哪里错了吗?
这个错误很容易解释。在 example->LoadPlayerA(audioPath, offsetAndLength);
中,audioPath
的类型是 jstring
,但在您的 LoadPlayerA()
函数中,第一个参数是 char *audioPath
。编译器不知道如何将 jstring
转换为 char*
,因此您必须自己完成。
从 Jason Rogers answer here 借用,您可以将代码更改为:
JNIEXPORT void Java_de_meetspot_ndktest_MainActivity_LoadPlayerA(JNIEnv *javaEnvironment, jobject self, jstring audioPath, jlongArray offsetAndLength)
{
const char* audio = javaEnvironment->GetStringUTFChars(audioPath, JNI_FALSE)
example->LoadPlayerA(audio, offsetAndLength);
javaEnvironment->ReleaseStringUTFChars(audioPath, audio);
}
编辑:
我忘了包含 Release()
函数。这需要在完成数组后调用,否则会发生内存泄漏。