티스토리 뷰

JNI에서는 C와 C++을 모두 사용 할 수 있다. 사용법이 약간 다른데,

C에서는 env 구조체의 함수 포인터를 이용해 호출하고, C++에서는 env 인스턴스의 멤버 함수를 호출한다.

 

예를 들어 JNI의 FindClass 함수를 호출하는 예는 각각 아래와 같다.

 

C의 경우

jclass jklass = (*env)->FindClass(env, "java/lang/Integer");

C에서는 함수 포인터를 호출한다. 함수의 첫번째 인자에는 JNIEnv 타입의 변수를 설정하고, 두 번째 부터는 함수에 필요한 인자를 적는다.

 

 

C++의 경우

jclass jklass = env->Findlass("java/lang/Integer");

C++은 env 인스턴스의 멤버 함수를 호출한다. C처럼 env 구조체를 인자로 넣을 필요 없이 FindClass에 필요한 인자만 적는다.

문제는 C++로 만든 경우 자바에서 호출이 필요한 함수일 경우 extern "C"를 선언해야 하는 번거로움이 있다는 점이다. 주의하자.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함