我目前在一个项目中同时使用C 和Java,并且希望能够将包含在C 中的对象发送到我的Java接口,以便通过GUI对其进行修改,然后将所做的修改发送回C ++中。
到目前为止,我一直没有通过JNI接口向Java返回int或boolean值。这次我必须通过接口发送对象。我已经在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将有一个采用字符串的构造函数。我相信解决方案简单有效。