我想使用JNI將對象從C++返回給java代碼。
我不需要使用它的方法,只是閱讀它的字段。 我該怎麼辦?
這個類就是這樣的:從C++返回對象到Java
class MyOutputClass
{
public:
Array<SomeOtherClass> m_objects1;
Array<YetAnoterClass> m_objects2;
}
數組是一類礦井,但如果你想傳遞一個C++對象到Java你,我會用Java數組,而不是:)
我想使用JNI將對象從C++返回給java代碼。
我不需要使用它的方法,只是閱讀它的字段。 我該怎麼辦?
這個類就是這樣的:從C++返回對象到Java
class MyOutputClass
{
public:
Array<SomeOtherClass> m_objects1;
Array<YetAnoterClass> m_objects2;
}
數組是一類礦井,但如果你想傳遞一個C++對象到Java你,我會用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;
}
您可以將您的數據在構造函數或訪問對象的字段並改變它們。 BTW。我沒有編譯上面的代碼。但它不應該包含太多的錯誤。
不會像http://code.google.com/p/protobuf/或http://msgpack.org/這樣的工作嗎?這個想法是在你的java/C++代碼中創建服務器/客戶端並開始移動對象?整體溝通非常有效,所以我懷疑速度是一個問題。
取決於對象。它可能需要是[POD(或C++ 11中的標準佈局)](http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are - 他們特別)爲此。向我們展示一些代碼。 –
好的,我添加了一些代碼。我沒有太多的JNI代碼:) – Idov