Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java回调到C++;通过JNI java C++文件,我现在需要给Java模块返回一个C++模块。(这里C++模块是更高的模块,Java是较低的模块。)任何输入都是可以理解的。您正在通过JNI调用C++方法,并且希望为java层提供回C++对象的java语言。我没弄错你的问题吧 我这样做是为了把一个指针作为C++的对象传递给:< /P> class JavaClass { long nativeObjectPtr; // This is the function getting called from C++. void MyFunc(long ptr) { ... nativeObjectPtr = ptr; } ... } 当您从C++调用 MyFunc < /Cord>时,将指针传递给您的本地对象,如: MyClass* ptr = ...; // Pointer to your native object; env->CallVoidMethod(javaObj, myFuncMethodID, (long)ptr);_Java_C++_Java Native Interface - Fatal编程技术网

从java回调到C++;通过JNI java C++文件,我现在需要给Java模块返回一个C++模块。(这里C++模块是更高的模块,Java是较低的模块。)任何输入都是可以理解的。您正在通过JNI调用C++方法,并且希望为java层提供回C++对象的java语言。我没弄错你的问题吧 我这样做是为了把一个指针作为C++的对象传递给:< /P> class JavaClass { long nativeObjectPtr; // This is the function getting called from C++. void MyFunc(long ptr) { ... nativeObjectPtr = ptr; } ... } 当您从C++调用 MyFunc < /Cord>时,将指针传递给您的本地对象,如: MyClass* ptr = ...; // Pointer to your native object; env->CallVoidMethod(javaObj, myFuncMethodID, (long)ptr);

从java回调到C++;通过JNI java C++文件,我现在需要给Java模块返回一个C++模块。(这里C++模块是更高的模块,Java是较低的模块。)任何输入都是可以理解的。您正在通过JNI调用C++方法,并且希望为java层提供回C++对象的java语言。我没弄错你的问题吧 我这样做是为了把一个指针作为C++的对象传递给:< /P> class JavaClass { long nativeObjectPtr; // This is the function getting called from C++. void MyFunc(long ptr) { ... nativeObjectPtr = ptr; } ... } 当您从C++调用 MyFunc < /Cord>时,将指针传递给您的本地对象,如: MyClass* ptr = ...; // Pointer to your native object; env->CallVoidMethod(javaObj, myFuncMethodID, (long)ptr);,java,c++,java-native-interface,Java,C++,Java Native Interface,在Java类中,创建一个本机函数,该函数将调用回本机对象: // inside JavaClass native void callBackIntoNative(long ptr); void CallBackIntoNative() { callBackIntoNative(nativeObjectPtr); } 和在您的本机函数的强c++实现< /St>中,简单地 > c> < /> > C++ C++类的长,并调用它的适当函数: JNIEXPORT jobject JNICAL

在Java类中,创建一个本机函数,该函数将调用回本机对象:

// inside JavaClass
native void callBackIntoNative(long ptr);

void CallBackIntoNative() {
    callBackIntoNative(nativeObjectPtr);
}
<>和在您的本机函数的<>强c++实现< /St>中,简单地<强> > c> < /> > C++ C++类的长,并调用它的适当函数:

JNIEXPORT jobject JNICALL JavaClass_callBackIntoNative(JNIEnv* env, jobject obj, jlong ptr)
{
    MyClass* o = reinterpret_cast<MyClass*>(ptr);

    // We have the pointer to our native object, simply call the needed function.
    o->Callback();
}
JNIEXPORT jobject JNICALL JavaClass_callbackintorient(JNIEnv*env、jobject obj、jlong ptr)
{
MyClass*o=重新解释铸件(ptr);
//我们有指向本机对象的指针,只需调用所需的函数。
o->Callback();
}

java C++中,当然,你必须确保你的原生对象在整个时间内不会被破坏,以便调用它。

< p>在Java类中创建一个本机方法,用jnI的注册码在C++代码中登记该方法,在C++代码中编写本地封装器方法(就像我们在Java到C++调用中那样)。调用你的原生方法,你将在C++ exe中得到回调。

我想你应该稍微澄清这个问题,你不清楚你要达到什么。嗨,马克你的解决方案将不起作用,他要求从java jar文件回调到C++ exe,你在处理DLL时所显示的东西将起作用。在您的情况下,他将得到链接错误。@user1808932是正确的。但要完成马克的解决方案,没有多少工作要做。您只需要通过调用方法JNIEnv::RegisterNatives来注册本机方法。请参阅第6章“CODESTORT项目”的示例6:“回调和实例变量”,“从C++调用java,用JNI”(),如何获得MySimeOODID?