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

问题描述 投票:-2回答:1

我有两个文件: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中工作?

谢谢你的帮助!

c java-native-interface jnienv
1个回答
0
投票

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

在C文件中可以使用_JNIEnv。

是的,不应该保存JniEnv值。谢谢你们所有人。

© www.soinside.com 2019 - 2024. All rights reserved.