将对象从C ++返回到Java

时间:2011-08-27 15:41:37

标签: java c++ object java-native-interface

我想使用JNI将对象从c ++返回到java代码 我不需要使用它的方法,只是阅读它的字段。 我该怎么办? 这个类就是这样的:

class MyOutputClass
{
public:
 Array<SomeOtherClass> m_objects1;
 Array<YetAnoterClass> m_objects2;
}

Array是我的一类,但我将使用java数组:)

2 个答案:

答案 0 :(得分:3)

如果要将C ++对象传递给Java,则不能。 但是您可以在本机中创建一个Java对象,然后从您的本机方法返回它 这将是这样做的:

JNIEXPORT myJavaObj JNICALL Java_cls_getObj
(JNIEnv *env, jobject obj)
{
jclass myClass;

//Find your class
myClass = (*env)->FindClass(env, "()LMyJavaClass;");

jmethodID cons = env->GetMethodID(myClass, "<init>", 
                              "(V)V"); 
jobject obj = env->NewObject(myClass, cons);

//Return the object.
return obj;
}

您可以在ctor中传递数据,也可以访问对象的字段并进行更改。 BTW。我没有编译上面的代码。但它不应包含太多错误。

答案 1 :(得分:0)

http://code.google.com/p/protobuf/http://msgpack.org/之类的内容不会为您完成这项工作吗?我们的想法是在您的java / c ++代码中创建服务器/客户端并开始移动对象?整体沟通非常有效,所以我怀疑速度是个问题。