안녕하세요, JNI를 막 접한 초보입니다 ㅠㅠ
JAVA에서 class를 예를들어
public class TEST{
byte[] A = new byte(2);
}
이러한 클래스를 만들고
public class ReadJNI
{
static
{
System.loadLibrary("ReadJNI");
}
public native TEST[] ClsTest();
}
이렇게 JNI 코드를 짰습니다.
그리고 C++ 에서 TEST클래스를 받아서
예를들어
for( int i = 0; i < 100; i++ )
{
TEST[i].A = i;
}
이런식으로 값을 세팅하고 싶습니다
그래서
JNIEXPORT jobjectArray JNICALL Java_jni_ReadJNI_ClsTest
(JNIEnv *_env, jobject _obj)
{
jclass jCls = _env->FindClass( "pkg/TEST" );
jobjectArray jObjarr = _env->NewObjectArray( 100, jCls , NULL );
for( int i = 0; i < 100; i++ )
{
???????
이렇게 생성을 하였는데 문제는 클래스의 멤버 변수에 접근하는 방법을 모르겠다는것..
_env->FindClass( "pkg/TEST/A" ); 이방법은 안되더군요..
그래서 그냥 바이트 배열로 생성을 해보았습니다.
JNIEXPORT jobjectArray JNICALL Java_jni_ReadJNI_ClsTest
(JNIEnv *_env, jobject _obj)
{
jclass jCls = _env->FindClass( "pkg/TEST" );
jobjectArray jObjarr = _env->NewObjectArray( 100, jCls , NULL );
for( int i = 0; i < 100; i++ )
{
jclass mem_cls = _env->FindClass( "[B" );
jobjectArray Memarr = _env->NewObjectArray(2, mem_cls , NULL);
jbyte* Bbuf = new jbyte[2];
jbyteArray Barr = _env->NewByteArray(2);
for( int j = 0; j < 2; j++ )
Bbuf[j] = k;
_env->SetByteArrayRegion( Barr, 0, 2, Bbuf );
_env->SetObjectArrayElement( jObjarr , j, Barr);
}
return jObjarr;
}
이런식으로 만들었더니 JAVA에서
ReadJNI cReadJNI = new ReadJNI();
Test[][] test = null;
test = cReadJNI.ClsTest();
이런식으로 받아올수 있었습니다.
그런데 문제는 멤버변수명이 없어서
test[0][0] 에 멤버변수 A의 값은 있지만
JAVA에서 이것을 컨트롤 할 수 없다는 것이 문제 입니다..
JAVA 에서 클래스를 C++로 넘겨서 변수까지 컨트롤 할수 있는 방법이 있나요?
아니면 C++에서 생성할때 변수명을 지정할수는 없을까요?
답답합니다.. 도와주세요 ㅠ




http://java.sun.com/docs/books/jni/html/jniTOC.html
JNI 문법은 해당문서에 대부분 나와있습니다.