보통 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인 것이다.
나중에 혹시 쓸 경우를 대비하여 포스팅한다.ㅋㅋㅋㅋ
'6. With IT > 6.2 NDK' 카테고리의 다른 글
NDK-다중 타겟 패턴. 멈춤 문제 (7) | 2013.02.07 |
---|---|
extern사용 예(리눅스환경) (0) | 2012.10.10 |
안드로이드 File Explorere에서 sdcard안에 디렉토리가 만들어지지 않을때... (0) | 2012.09.08 |
android-ndk-profile (0) | 2012.08.24 |
NDK_컴파일과정과 링크 (0) | 2012.06.19 |