JNI 헤더 만들기
jni를 써야 한다면 적절한 jni용 c/cpp헤더를 만들어야 한다.
문제는 javah 쓰기가 귀찮다는거다.
그냥 직접 코딩하자. 규칙이 간단하기 때문이다.
포멧
함수헤드는 항상 이 포멧이다:
JNIEXPORT returnType JNICALL functionName (JNIEnv* env, jobject thiz, …params)
- JNIEXPORT, JNICALL: 컴파일러 힌트. 그냥 적자
- 사용 가능한 자바 타입: jboolean, jbyte, jshort, jint, jlong, jfloat, jdouble, jobject
- fucntion Name: 함수 이름
- Separator: _
- Java_<package name>_<class name>_<method name> // 아래의 예제를 보는게 이해가 빠를듯
- JNIEnv* env: 헬퍼 클래스. 타입 변환, 클래스 레플리케이션, 메소드 호출이 가능하다
- jobject thiz: this에 해당한다
- params: ‘j’로 시작하는 타입 매개변수
예제
#include <jni.h>
#include <stdlib.h> // rand()
extern “C” { // 매우 중요한 부분이다. 반드시 최 외곽에는 extern "C"를 적어 함수 이름이 컴파일러에 의해 뭉개지지 않도록 해야 한다
JNIEXPORT jint JNICALL Java_com_makerj_MyCRandom_nextInt(JNIEnv* env, jobject thiz)
{
return rand();
}
}
'JAVA' 카테고리의 다른 글
SWIG C and JAVA (0) | 2018.03.15 |
---|---|
Java bouncycastle 사용하기 (0) | 2015.09.17 |
GSON (0) | 2015.08.13 |
Java XML 생성 및 저장 (0) | 2014.07.20 |
Java XML 정리 (0) | 2014.07.19 |