java - 将 java 字符串处理为 Android Studio+NDK 的原生 C/C++

标签 java android c++ c android-ndk

我正在尝试使用 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)));

Native 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;
  }

Native C函数调用的函数是:-

int filefunction(char* filename)
{
FILE* file = fopen((char*)filename,"w+");
//Reads value from the file and returns it.
.
.
.
}

但我收到错误“-> 的基操作数具有非指针类型 JNIEnv{aka _JNIEnv}

这是将字符串传递给 native C 代码的正确方法,还是有任何其他方法可以将字符串从 Java 分配给 const char* ?

最佳答案

更改以下行:

Path = (*env)->GetStringUTFChars( env, path, null) ;

收件人:

Path = env->GetStringUTFChars( env, path, JNI_TRUE) ;

传递 jni boolean 变量,而不是传递 null。

关于java - 将 java 字符串处理为 Android Studio+NDK 的原生 C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34851470/

相关文章:

Java Final 类或私有(private)构造函数

java - 使用套接字在 Android 设备内创建连接

android - 来自集成测试的 flutter 位置权限不起作用

Android AppWidget 不更新

c++ - 是否有任何工具可以将 C++ for 循环重写为 STL 算法?

c++ - Stroustrup 的 C++ Book Challenge,有人可以帮助我理解这段代码吗?

c++ - 起始 block 存储地址

java - 我需要在每个新输入流上调用 close() 吗?

java - 在生成 application/json 的 Web API 中返回简单字符串

android - 如何从ListView中获取项目