JNI:DataByPass
자바 배열 타입(Java array type)전달방법
JAVA에서 배열타입 데이터를 JNI에서 획득하는 방법에 대하여 설명한다. JAVA측 JNI호출 Method Prototype은 아래와 같다.
JNI측 Method 구현은 아래와 같다.
JNIEXPORT void JNICALL
Java_com_example_MapView_generateTexture(JNIEnv* env, jobject thiz, jintArray pixels)
{
int * acquire_pixels = env->GetIntArrayElements(pixels, 0);
if (acquire_pixels != 0) {
// use acquire_pixels.
}
env->ReleaseIntArrayElements(pixels, acquire_pixels, JNI_ABORT);
}
자바 String 전달방법
JAVA에서 String 타입을 JNI에 전달하거나 전달받는 방법에 대하여 설명한다. JAVA측 JNI호출 Method Prototype은 아래와 같다.
JNI측 Method 구현은 아래와 같다. 문자열을 입력받은 후 다시 반환한다.
JNIEXPORT jstring JNICALL
Java_JNITest_greeting(JNIEnv *env, jobject obj, jstring jstr) {
const char *name = (*env)->GetStringUTFChars(env, jstr, NULL);//Java String to C Style string
char msg[60] = "Hello ";
jstring result;
strcat(msg, name);
(*env)->ReleaseStringUTFChars(env, jstr, name);
puts(msg);
result = (*env)->NewStringUTF(env, msg); // C style string to Java String
return result;
}
자바 String 전달방법 02
JAVA에서 String 타입을 JNI에 전달하는 더욱 간단한 샘플은 아래와 같다.
JNIEXPORT void JNICALL
Java_com_example_MapView_generateTexture(JNIEnv* env, jobject thiz, jstring key)
{
std::string key_string;
const char * acquire_key = env->GetStringUTFChars(key, NULL); //Java String to C Style string
key_string.assign(acquire_key);
env->ReleaseStringUTFChars(key, acquire_key);
}