2011-08-27 60 views
0

我想使用JNI將對象從C++返回給java代碼。
我不需要使用它的方法,只是閱讀它的字段。 我該怎麼辦?
這個類就是這樣的:從C++返回對象到Java

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

數組是一類礦井,但如果你想傳遞一個C++對象到Java你,我會用Java數組,而不是:)

+0

取決於對象。它可能需要是[POD(或C++ 11中的標準佈局)](http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are - 他們特別)爲此。向我們展示一些代碼。 –

+0

好的,我添加了一些代碼。我沒有太多的JNI代碼:) – Idov

回答

3

不能。 但是你可以在本地創建一個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; 
} 

您可以將您的數據在構造函數或訪問對象的字段並改變它們。 BTW。我沒有編譯上面的代碼。但它不應該包含太多的錯誤。

+0

好的,但是這個JNI對象應該在哪裏定義?在C++代碼中? – Idov

+0

@ldov:不,這是一個java對象。在這個例子中,你搜索一個Java類找到ctor,然後再執行ctor創建一個新的對象。然後你將它返回給java部分,並可以在那裏使用它。也許你應該看看JNI教程。 http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jni.html – mkaes