본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[jni] jni 사용시 주의점.

by 돼지왕 왕돼지 2012. 10. 26.
반응형


 

jni 사용시 주의점.

for 문의 사용

for( int i = 0; i < 3; i++ )

- X
- 위는 자바 스타일의 사용법입니다. C 언어 자체가 저렇게 정의를 하면서 쓰는 것을 지원하지 않는데, JNI 는 C 언어를 사용하기 때문에 아래와 같이 사용해야 합니다.

int i;
for( i=0; i < 3; i++ )

- O





java 로부터 전달받은 array 류의 사용.

- java 에서 primitive array 를 전달한다면 native 에서는 j<Type>Array 로 전달이 됩니다. 예를 들어 java 에서 int[] 를 넘겼다면 native 에서는 jIntArray 의 형태로 전달이 됩니다.

// jintArray intArrayObj is delivered
intArrayObj[ 2 ]

- X
- jIntArray 는 array 가 아닌 object 형태이기 때문에 일반 array 처럼 위와 같은 방법으로 element 에 access 할 수 없습니다.

// jintArray intArrayObj
jint intArray* = (*env)->GetIntArrayElements( env, intArrayObj, 0 );
intArray[ 2 ]

- O
- 위와 같이 Get<Type>ArrayElements 를 통해서 primitive type 으로 변경을 해주어야 일반 array 를 사용하듯이 element 에 접근할 수 있습니다.





java 로 array 를 return 하는 경우.

- java 에서 primitive array 로 전달한 것은 native 에서 j<Type>Array 의 형태로 전달됩니다. 마찬가지로 primitive array 를 return 해줄 때도, j<Type>Array 의 형태로 return 해주어야 합니다.

jint output* = getOutput(); // prepare jint array
jintArray result = (*env)->
NewIntArray( env, size );
(*env)->SetIntArrayRegion( env, result, 0, size, output ); 
return result; 



도움이 되셨다면 손가락 꾸욱~ ( 로그인 필요 x )



반응형

댓글