我在使用C ++ / Android(JNI)时遇到错误,我绝对不知道如何修复它。(我对C ++很新)
错误:(289,23)错误:无法使用类型为'jstring'(又名'_jstring *')的左值初始化'char *'类型的参数
此行的错误点
JNIEXPORT void Java_de_meetspot_ndktest_MainActivity_LoadPlayerA(JNIEnv *javaEnvironment, jobject self, jstring audioPath, jlongArray offsetAndLength) {
example->LoadPlayerA(audioPath, offsetAndLength);
}
在我的课堂宣言中我有:
public: void LoadPlayerA(char *audioPath, int *params);android
有人可以告诉我,我错在哪里吗?
答案 0 :(得分:1)
错误非常自我解释。在example->LoadPlayerA(audioPath, offsetAndLength);
中,audioPath
的类型为jstring
,但在LoadPlayerA()
函数中,第一个参数为char *audioPath
。编译器不知道如何将jstring
转换为char*
,因此您必须自己完成。
借用Jason Rogers回复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()
功能。完成数组后需要调用它,否则会有内存泄漏。