티스토리 뷰
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"를 선언해야 하는 번거로움이 있다는 점이다. 주의하자.
'Development > Mobile' 카테고리의 다른 글
[Android JNI/NDK] 로그 출력 (0) | 2015.09.21 |
---|---|
[Android JNI/NDK] 배열 사용하기 (3) | 2015.09.21 |
[Android JNI/NDK] C/C++에서 Java 함수 호출 하기 / 멤버 변수 사용하기 (0) | 2015.09.21 |
[Android JNI/NDK] JNI를 이용해 Java에서 C 함수 호출하기 (0) | 2015.09.21 |
[Android JNI/NDK] JNI의 변수 타입과 시그니처 (1) | 2015.09.18 |
[Android JNI/NDK] JNI와 NDK에 대한 대략적인 설명 (0) | 2015.09.17 |
[Android] 각 View들의 setBackground... setImage..등등의 사항이 다르다. (0) | 2013.12.21 |
[android] Logcat의 filter(필터)가 제대로 동작하지 않는다. (0) | 2013.12.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- db
- C
- AWS
- 안드로이드
- Visual C++
- MFC
- 음악
- winapi
- android
- driver
- linux
- NDK
- kering
- jni강좌
- 리눅스
- gcc
- API
- algorithm
- java
- Troubleshooting
- 프로그래밍
- source
- database
- 드라이버
- C++
- Cloud
- jni
- Quiz
- it
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함