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

[Java] JNI functions.

by 돼지왕 왕돼지 2012. 3. 22.
반응형


안녕하세요
 돼지왕 왕돼지입니다.


이 글은 Oracle 에서 제공하는 Tutorial 문서를 번역한 것입니다.

출처 :  http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp9502   

오늘은 JNI function에 대해 한번 알아볼까요?

JNI Functions

이 장은 JNI function 의 reference 역할을 합니다. 여기서는 모든 JNI function 의 list 를 제공합니다. JNI function table 의 정확한 layout 도 보여줍니다.

"반드시"  는 말을 사용하는 부분을 주의깊게 보시길 바랍니다. 예를 들어 당신이 어떤 JNI 함수를 볼 때 "반드시" non-NULL object 를 받아야 한다 라는 말이 있다면, JNI function 에 NULL 이 전달되지 않도록 하는 것은 JNI 프로그래머, 즉 당신의 역할입니다. 결과적으로 JNI 구현은 JNI 함수에서 NULL pointer를 check 하지 않도록 해야 합니다.

이 장의 일부는 Netscape 의 JRI 문서로부터 가져왔습니다.

 

Interface Funtion Table


모든 함수는 JNIEnv argument 와 미리 정해진 offset 을 통해 사용할 수 있습니다. JNIEnv type pointer 는 모든 JNI 함수들을 pointing 하고 있는 구조입니다. 다음과 같이 정의되어 있죠.

typedef const struct JNINativeInterface *JNIEnv;



VM 은
function table 을 다음과 같이 초기화합니다.


const struct JNINativeInterface ... = {

    NULL,

    NULL,

    NULL,

    NULL,

    GetVersion,


    DefineClass,

    FindClass,


    FromReflectedMethod,

    FromReflectedField,

    ToReflectedMethod,


    GetSuperclass,

    IsAssignableFrom,


    ToReflectedField,


    Throw,

    ThrowNew,

    ExceptionOccurred,

    ExceptionDescribe,

    ExceptionClear,

    FatalError,


    PushLocalFrame,

    PopLocalFrame,


    NewGlobalRef,

    DeleteGlobalRef,

    DeleteLocalRef,

    IsSameObject,

    NewLocalRef,

    EnsureLocalCapacity,


    AllocObject,

    NewObject,

    NewObjectV,

    NewObjectA,


    GetObjectClass,

    IsInstanceOf,


    GetMethodID,


    CallObjectMethod,

    CallObjectMethodV,

    CallObjectMethodA,

    CallBooleanMethod,

    CallBooleanMethodV,

    CallBooleanMethodA,

    CallByteMethod,

    CallByteMethodV,

    CallByteMethodA,

    CallCharMethod,

    CallCharMethodV,

    CallCharMethodA,

    CallShortMethod,

    CallShortMethodV,

    CallShortMethodA,

    CallIntMethod,

    CallIntMethodV,

    CallIntMethodA,

    CallLongMethod,

    CallLongMethodV,

    CallLongMethodA,

    CallFloatMethod,

    CallFloatMethodV,

    CallFloatMethodA,

    CallDoubleMethod,

    CallDoubleMethodV,

    CallDoubleMethodA,

    CallVoidMethod,

    CallVoidMethodV,

    CallVoidMethodA,


    CallNonvirtualObjectMethod,

    CallNonvirtualObjectMethodV,

    CallNonvirtualObjectMethodA,

    CallNonvirtualBooleanMethod,

    CallNonvirtualBooleanMethodV,

    CallNonvirtualBooleanMethodA,

    CallNonvirtualByteMethod,

    CallNonvirtualByteMethodV,

    CallNonvirtualByteMethodA,

    CallNonvirtualCharMethod,

    CallNonvirtualCharMethodV,

    CallNonvirtualCharMethodA,

    CallNonvirtualShortMethod,

    CallNonvirtualShortMethodV,

    CallNonvirtualShortMethodA,

    CallNonvirtualIntMethod,

    CallNonvirtualIntMethodV,

    CallNonvirtualIntMethodA,

    CallNonvirtualLongMethod,

    CallNonvirtualLongMethodV,

    CallNonvirtualLongMethodA,

    CallNonvirtualFloatMethod,

    CallNonvirtualFloatMethodV,

    CallNonvirtualFloatMethodA,

    CallNonvirtualDoubleMethod,

    CallNonvirtualDoubleMethodV,

    CallNonvirtualDoubleMethodA,

    CallNonvirtualVoidMethod,

    CallNonvirtualVoidMethodV,

    CallNonvirtualVoidMethodA,


    GetFieldID,


    GetObjectField,

    GetBooleanField,

    GetByteField,

    GetCharField,

    GetShortField,

    GetIntField,

    GetLongField,

    GetFloatField,

    GetDoubleField,

    SetObjectField,

    SetBooleanField,

    SetByteField,

    SetCharField,

    SetShortField,

    SetIntField,

    SetLongField,

    SetFloatField,

    SetDoubleField,


    GetStaticMethodID,


    CallStaticObjectMethod,

    CallStaticObjectMethodV,

    CallStaticObjectMethodA,

    CallStaticBooleanMethod,

    CallStaticBooleanMethodV,

    CallStaticBooleanMethodA,

    CallStaticByteMethod,

    CallStaticByteMethodV,

    CallStaticByteMethodA,

    CallStaticCharMethod,

    CallStaticCharMethodV,

    CallStaticCharMethodA,

    CallStaticShortMethod,

    CallStaticShortMethodV,

    CallStaticShortMethodA,

    CallStaticIntMethod,

    CallStaticIntMethodV,

    CallStaticIntMethodA,

    CallStaticLongMethod,

    CallStaticLongMethodV,

    CallStaticLongMethodA,

    CallStaticFloatMethod,

    CallStaticFloatMethodV,

    CallStaticFloatMethodA,

    CallStaticDoubleMethod,

    CallStaticDoubleMethodV,

    CallStaticDoubleMethodA,

    CallStaticVoidMethod,

    CallStaticVoidMethodV,

    CallStaticVoidMethodA,


    GetStaticFieldID,


    GetStaticObjectField,

    GetStaticBooleanField,

    GetStaticByteField,

    GetStaticCharField,

    GetStaticShortField,

    GetStaticIntField,

    GetStaticLongField,

    GetStaticFloatField,

    GetStaticDoubleField,


    SetStaticObjectField,

    SetStaticBooleanField,

    SetStaticByteField,

    SetStaticCharField,

    SetStaticShortField,

    SetStaticIntField,

    SetStaticLongField,

    SetStaticFloatField,

    SetStaticDoubleField,


    NewString,


    GetStringLength,

    GetStringChars,

    ReleaseStringChars,


    NewStringUTF,

    GetStringUTFLength,

    GetStringUTFChars,

    ReleaseStringUTFChars,


    GetArrayLength,


    NewObjectArray,

    GetObjectArrayElement,

    SetObjectArrayElement,


    NewBooleanArray,

    NewByteArray,

    NewCharArray,

    NewShortArray,

    NewIntArray,

    NewLongArray,

    NewFloatArray,

    NewDoubleArray,


    GetBooleanArrayElements,

    GetByteArrayElements,

    GetCharArrayElements,

    GetShortArrayElements,

    GetIntArrayElements,

    GetLongArrayElements,

    GetFloatArrayElements,

    GetDoubleArrayElements,


    ReleaseBooleanArrayElements,

    ReleaseByteArrayElements,

    ReleaseCharArrayElements,

    ReleaseShortArrayElements,

    ReleaseIntArrayElements,

    ReleaseLongArrayElements,

    ReleaseFloatArrayElements,

    ReleaseDoubleArrayElements,


    GetBooleanArrayRegion,

    GetByteArrayRegion,

    GetCharArrayRegion,

    GetShortArrayRegion,

    GetIntArrayRegion,

    GetLongArrayRegion,

    GetFloatArrayRegion,

    GetDoubleArrayRegion,

    SetBooleanArrayRegion,

    SetByteArrayRegion,

    SetCharArrayRegion,

    SetShortArrayRegion,

    SetIntArrayRegion,

    SetLongArrayRegion,

    SetFloatArrayRegion,

    SetDoubleArrayRegion,


    RegisterNatives,

    UnregisterNatives,


    MonitorEnter,

    MonitorExit,


    GetJavaVM,


    GetStringRegion,

    GetStringUTFRegion,


    GetPrimitiveArrayCritical,

    ReleasePrimitiveArrayCritical,


    GetStringCritical,

    ReleaseStringCritical,


    NewWeakGlobalRef,

    DeleteWeakGlobalRef,


    ExceptionCheck,


    NewDirectByteBuffer,

    GetDirectBufferAddress,

    GetDirectBufferCapacity,


    GetObjectRefType
}; 


첫번째 3개의 entry 는 COM 과의 호환성을 위해 남겨놓았습니다. 추가적으로 function table의 첫 부분에 NULL 이 있는 것들은 추후에 JNI operation 관련된 것들이 추가될 수 있습니다. table 의 마지막 부분보다는 FindClass 이후에 추가될 것입니다. function table 은 모든 JNI interface pointers 에 의해 공유된다는 사실을 상기하세요.

JNI function 들은 사용용도에 따라 다음과 같이 구분 될 수 있습니다.




도움이 되셨다면 손가락 꾸욱~




반응형

댓글