티스토리 뷰

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/03   »
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
글 보관함