我想在Android Studio1.3.2 + NDK + Windows7上构建一个程序。 我想要将一个字符串从Java函数传递到Native C函数(const char*)。
Native C函数的声明为:-
public native int HRFromJNI(String path);
Java函数调用为:
tv.setText(String.valueOf(HRFromJNI(path)));
本地C函数如下:
extern "C" {
JNIEXPORT jint JNICALL
Java_com_example_hellojni_HelloJni_HRFromJNI
(JNIEnv *env, jobject obj,jstring path)
{
int HRval = 0;
char *Path;
Path = (*env)->GetStringUTFChars( env, path, null) ;
HRval = filefunction(Path);
return HRval;
}
被本地C函数调用的函数是:
int filefunction(char* filename)
{
FILE* file = fopen((char*)filename,"w+");
//Reads value from the file and returns it.
.
.
.
}
但是我收到错误信息“Base operand of -> has non-pointer type JNIEnv{aka _JNIEnv}”。
这是将字符串传递给本地C代码的正确方式吗?还是有其他方法可以将Java中的字符串分配给const char *?
(*env)->
),但是错误提示是C++语法的错误(在C++中需要写成env->
)。请注意修改代码。 - Violet GiraffeReleaseUTFChars
了。 - Violet GiraffeGetStringUTFChars
分配以保存字符串数据的内存。如果您不调用ReleaseUTFChars
,则会出现内存泄漏。 - Violet Giraffe