본문 바로가기

6. With IT/6.2 NDK

JNI로 call by reference형태 구해보기


보통 call by reference는 C/C++에서 많이 쓰이는 방법인데, JNI를 통해서도 구현 가능한지 의문이들어 테스트해보았다.(^0^)


Java단에서 C단으로 call by reference를 하려면 주소값을 넘겨주어야 하는데, 여기에서는 하나의 객체를 만들어서 접근하는 방법으로 진행해 보았다.



<Java>

class Myclass { 

int a = 1;

int b = 2;

}

...

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(com.example.jni.R.layout.activity_main);

...

Myclass myobject = new Myclass(); 

// 이런식으로 객체를 던저준다.

CallByRef(myobject);

...

}


<C>


void Java_com_example_jni_myclass_CallByRef

  (JNIEnv *env, jobject obj, jobject myObj) {


jfieldID fid;

jmethodID mid;

printf(" Inside the JNI native method \n");

jclass cls = env->GetObjectClass(myObj);


fid = env->GetFieldID(cls,"a","I");

env->SetIntField(myObj,fid, 3);


fid = env->GetFieldID(cls,"b","I");

env->SetIntField(myObj,fid, 4);

}


====================================================================================================================


====================================================================================================================


====================================================================================================================


====================================================================================================================

위의 내용은 인터넷에 널려있는 JNI 레퍼런스문서이다. 알아서 잘 찾아보시길

불필요한 코드는 생략하고, C코드만 본다. 중요한 것은 GetObjectClass, GetFieldID와 SetIntField인 것이다.


나중에 혹시 쓸 경우를 대비하여 포스팅한다.ㅋㅋㅋㅋ