gpt4 book ai didi

java - 通过 JNI 将 C++ 类返回给 Java

转载 作者:IT老高 更新时间:2023-10-28 22:37:00 27 4
gpt4 key购买 nike

我目前在一个项目中同时使用 C++ 和 Java,我希望能够将 C++ 中包含的对象发送到我的 Java 接口(interface),以便通过 GUI 对其进行修改,然后将修改发送回在 C++ 中。

到目前为止,我一直在通过 JNI 接口(interface)向 Java 返回任何内容、int 或 boolean 值。这次我必须通过接口(interface)发送一个对象。我在 C++ 和 Java 中都提供了类似的类定义。 我想知道如何创建对象以便在 Java 中使用它。

在 C++ 中我有:

JNIEXPORT MyObject JNICALL Java_ca_X_Y_Z_C_1getMyObject(JNIEnv* env, jclass, jint number);

这个函数会被 Java 调用,以便从 C++ 端获取对象(对象包含在单例中,易于访问)。

在Java端,我对这个方法做了一个简单的调用,

MyObject anObject = C_getMyObject(3);

这应该返回我新创建的对象。

当我进行实际调用时,Java 当前返回 UnsatisfiedLinkError。怎么了?

最佳答案

这是我选择使用的解决方案:

首先,我将在 Java 中创建一个类似的对象。然后,我将从 C++ 实例化它并将所有值传递给它。

(C++)
clazz = env->FindClass("java/lang/Integer");
jmethodID method = env->GetMethodID(clazz, "<init>", "(I)V");
return env->NewObject(clazz, method, (jint)anInteger);

但后来我意识到这不是很便携,而且有点太复杂了。

相反,我决定返回一个字符串,Java 将解析并使用它来初始化对象。

(JAVA)
String aString = "valuesoftheobject";
MyObject myObject(aString);

MyObject 将有一个接受字符串的构造函数。我相信解决方案简单有效。

关于java - 通过 JNI 将 C++ 类返回给 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1711490/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com