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"를 선언해야 하는 번거로움이 있다는 점이다. 주의하자.

 

저작자 표시 비영리 변경 금지
신고
블로그 이미지

roter

JHB / Peripheral Programmer

댓글을 달아 주세요