c - JNIEnv 不能调用其他 c 文件中的方法?

标签 c java-native-interface jnienv

我有两个文件:MyJni.cpp 是 jni 文件。而MyObject.c是一个普通的c文件。

这是 MyJni.cpp 文件的代码:

 JNIEXPORT  void createMyObject(JNIEnv* env){
     malloc(MyObject)
     MyObject->setEnv(env);

    MyObject->callbackFunc();
}

static Void callback_for_myobject(MyObject * obj){
        JNIEnv* env = obj->m_env;
        Env->NewStringUTF(); //    **OK**
}

MyObject.c 文件是:

 void* m_env;
setEnv(void* env){
  m_env = env;

 JNIEnv* pEnv = (JNIEnv*)env;
        pEnv->NewStringUTF();//   **ERROR**
}

Void callbackFunc()
{
    callback_for_myobject(this);
}

我将 JNIEnv 保存到 MyObject(也许不应该这样做)。 而在 MyObject 中,我想调用 Jni 方法,但它不能。 当我回调 MyJni 文件时,它工作正常。

为什么?我找不到任何区别...... 我怎样才能让它在 MyObject 中工作?

感谢您的帮助!

最佳答案

我找到了原因:JNIEnv是一个C++类,不能在C文件中使用。

在C文件中可以使用_JNIEnv。

是的,不应该保存 JniEnv 值。谢谢大家。

关于c - JNIEnv 不能调用其他 c 文件中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47883163/

相关文章:

java - 尝试将 TCHAR 类型发送到接受字符串作为参数的 java 函数时,jvm 崩溃

java - Android JNI 调用方法 GetStringUTFLength 崩溃

java - 调用 CallVoidMethod 时出现 NoSuchMethodError

C 字符串数组

c - sync() 调用和sync 命令有何不同?

java - 如何在普通的非 Android Java 应用程序中使用 NDK 编译的 JNI 库?

c - 初始化一个指向二维数组的指针,然后将其与另一个数组链接

c - 如何从 C 中的 STDIN 或 Unix 管道读取流

java - 是否可以在 Java 中加载同一个 DLL 的不同版本?