2011-08-27 2 views
0

JNI를 사용하여 객체를 C++에서 Java 코드로 반환하려고합니다.
메소드를 사용할 필요는 없지만 필드를 읽는 것만으로 충분합니다. 어떻게해야합니까?
이 클래스는 다음과 같이 뭔가입니다 :C++에서 Java로 객체 반환

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

배열 내의 클래스입니다,하지만 난 대신 자바 배열을 사용합니다 :)

+0

개체에 따라 다릅니다. 그것은 아마도 [POD (또는 C++ 11의 표준 레이아웃)] 일 필요가 있습니다. (http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are - 특별 -). 몇 가지 코드를 보여주십시오. –

+0

좋아, 몇 가지 코드를 추가했습니다. 아직 많은 JNI 코드가 없습니다 :) – Idov

답변

3

자바 당신에게 C++ 객체를 전달하려는 경우 캔트. 그러나 네이티브 형식으로 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. 위의 코드를 컴파일하지 않았습니다. 그러나 너무 많은 오류를 포함하지 않아야합니다.

+0

ok,하지만이 JNI 객체는 어디에 정의해야합니까? C++ 코드에서? – Idov

+0

@ldov : 아니요, 자바 객체입니다. 이 예제에서 Java 클래스를 검색하면 ctor를 찾은 다음 ctor aka를 실행하여 새 객체를 만듭니다. 그런 다음 다시 자바 부분으로 돌려 놓고 거기에서 사용할 수 있습니다. 어쩌면 JNI 자습서를 살펴 봐야 할 것입니다. http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jni.html – mkaes

0

http://code.google.com/p/protobuf/ 또는 http://msgpack.org/과 같은 작업이 수행되지 않습니까? 아이디어는 java/C++ 코드에서 서버/클라이언트를 생성하고 객체를 움직이기 시작하는 것입니다. 전반적인 의사 소통은 매우 효율적이므로 속도가 문제가 될지 의심 스럽습니다.