안녕하세요, 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++에서 생성할때 변수명을 지정할수는 없을까요?

답답합니다.. 도와주세요 ㅠ