Java 从JNICALL调用Cocos2dx插件函数?
我在Java 从JNICALL调用Cocos2dx插件函数?,java,c++,java-native-interface,cocos2d-x,Java,C++,Java Native Interface,Cocos2d X,我在C++中有一个JNIEXPORTvoidJNICALL函数,它充当我的Java代码的回调函数。当Java警告C++代码发生了某些事情时,我想调用同一文件中的C++函数之一 但是我假设,JNICALL有一个不同的作用域,因为当我试图进行调用时,我的代码正在崩溃。(我得到“访问的过时本地引用”JNIerror) 在我看到的大多数示例中,JNICALL函数会触发对Java函数的JNI调用,我已经知道该怎么做了 但是如何从JNIEXPORT函数内部调用C++函数呢 编辑: 我应该注意到,我相信这与基
C++
中有一个JNIEXPORT
voidJNICALL
函数,它充当我的Java
代码的回调函数。当Java
警告C++
代码发生了某些事情时,我想调用同一文件中的C++
函数之一
但是我假设,JNICALL
有一个不同的作用域,因为当我试图进行调用时,我的代码正在崩溃。(我得到“访问的过时本地引用”JNI
error)
在我看到的大多数示例中,JNICALL
函数会触发对Java
函数的JNI
调用,我已经知道该怎么做了
但是如何从JNIEXPORT
函数内部调用C++
函数呢
编辑:
我应该注意到,我相信这与基于我的调试尝试调用Cocos2dx插件更密切相关
void MyClass::myFunction(const char* param)
{
CCLOG("Got into myFunction");
PluginParam pParam(param);
_plugin->CallFuncWithParam("passParam", &pParam, NULL);
}
extern "C"
JNIEXPORT void JNICALL Java_com_my_package_Class_gotParam(JNIEnv *env, jobject obj, jstring param)
{
CCLOG("Got into param callback");
const char* nativeStr = env->GetStringUTFChars(param, NULL);
MyClass class;
class.myFunction(nativeStr);
env->ReleaseStringUTFChars(param, nativeStr);
}
<>我能看到我的调试输出,但是它在CalfHealthPARAM行上崩溃了。< /P>发布实际代码,既要调用C++函数,又调用调用它的本机方法。请注意,您的“陈旧本地引用”错误是当您调用期望对象引用作为参数的JNI API函数时发生的。作为一种解决方法,我决定在
JNICALL
中直接调用我正在使用的Java库,因为Cocos2dx插件方式出于任何原因都不起作用。原则上,这与Cocos访问Java的方式相同,只是没有他们的PluginProtocol包装器漂亮。