JNI/자바 배열을 C배열로 변환하는 방법
* 변환함수
반환값 |
함수원형 |
jboolean* |
(*GetBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*) |
jbyte* |
(*GetByteArrayElements)(JNIEnv*, jbyteArray, jboolean*) |
jchar* |
(*GetCharArrayElements)(JNIEnv*, jcharArray, jboolean*) |
jshort* |
(*GetShortArrayElements)(JNIEnv*, jshortArray, jboolean*) |
jint* |
(*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*) |
jlong* |
(*GetLongArrayElements)(JNIEnv*, jlongArray, jboolean*) |
jfloat* |
(*GetFloatArrayElements)(JNIEnv*, jfloatArray, jboolean*) |
jdouble* |
(*GetDoubleArrayElements)(JNIEnv*, jdoubleArray, jboolean*) |
마지막 인자 jboolean*은 보통 NULL을 넣어 준다.
* 해제함수
반환값 |
함수원형 |
void |
(*ReleaseBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*, jint) |
void |
(*ReleaseByteArrayElements)(JNIEnv*, jbyteArray, jbyte*, jint) |
void |
(*ReleaseCharArrayElements)(JNIEnv*, jcharArray, jchar*, jint) |
void |
(*ReleaseShortArrayElements)(JNIEnv*, jshortArray, jshort*, jint) |
void |
(*ReleaseIntArrayElements)(JNIEnv*, jintArray, jint*, jint) |
void |
(*ReleaseLongArrayElements)(JNIEnv*, jlongArray, jlong*, jint) |
void |
(*ReleaseFloatArrayElements)(JNIEnv*, jfloatArray, jfloat*, jint) |
void |
(*ReleaseDoubleArrayElements)(JNIEnv*, jdoubleArray, jdouble*, jint) |
마지막 인자에 들어갈 수 있는 값
mode |
actions |
0 |
copy back the content and free the elems buffer |
JNI_COMMIT |
copy back the content but do not free the elems buffer |
JNI_ABORT |
free the buffer without copying back the possible changes |
* 데이터가 String일 경우
반환값 |
함수원형 |
const char* |
(*GetStringUTFChars)(JNIEnv*, jstring, jboolean*) |
void |
(*ReleaseStringUTFChars)(JNIEnv*, jstring, const char*) |
* 사용예제
JNIEXPORT void Java_com_example_mytest_test_arrayByte(JNIEnv *env, jobject obj, jbyteArray data)
{
jchar* pChar = (*env)->GetByteArrayElements(env, data, 0);
.
.
.
(*env)->ReleaseByteArrayElements(env, data, pChar, 0);
}
JNIEXPORT void Java_com_example_mytest_test_arrayInt(JNIEnv *env, jobject obj, jintArray data)
{
jint* pInt = (*env)->GetIntArrayElements(env, data, NULL);
.
.
.
(*env)->ReleaseIntArrayElements(env, data, pInt, 0);
}
JNIEXPORT void Java_com_example_mytest_test_jString(JNIEnv *env, jobject obj, jstring data)
{
char strbuf[128];
const char *sz = (*env)->GetSTringUTFChar(env, data, 0);
strcpy(strbuf, sz);
printf("string = %s\n", strbuf);
(*env)->ReleaseStringUTFChars(env, data, sz);
}
'프로그래밍 > Android' 카테고리의 다른 글
화면 꺼짐 방지, 슬립모드 방지, Screen On (0) | 2013.08.06 |
---|---|
타이틀바 없애기, 상태바 없애기, Full Screen 모드 만들기 (0) | 2013.06.20 |
JNI/네이티브 코드에서 자바 메서드 호출 방법 (0) | 2013.06.12 |
JNI/네이티브 변수 타입 비교 표 (0) | 2013.06.12 |
Activity Lifecycle(액티비티 생명주기) (0) | 2013.06.12 |