본문 바로가기

분류 전체보기

[JNI] 배열혈 아규먼트 JNI(Java Native Interface) - 4. 배열형 아규먼트 - 이번 시간에는 배열로 들어온 아규먼트를 처리하는 법을 조사해 보겠습니다. 단순히 배열로 되었을 뿐인데 무었이 있나라고 생각하시면.... 음.... 역시나 다른 언어간의 교신이므로 있습니다. 무언가가.... 단순한 메모리 참조를 넘어선 그 뒤의 무언가가..... 아무튼 기본 자료 형태의 배열과 오브젝트 형태의 배열로 나뉘어져 있습니다만.... 조금의 차이를 제외하고는 거의 동일 합니다. 먼저 일차원 배열에 대해서 알아 보도록 하겠습니다. 간단한 예제를 통해서 접근해 보겠습니다. class ArrayTest { public native void passArray(int []intary); static { System.loadLibr.. 더보기
[jni]객체의 메서드 실행하기 -Native Method 내부에서 자바의 메서드를 호출하는 방법은 바로 앞 절에서 언급한 객체의 변수에 접근하는 방법과 매우 유사한 단계를 거칩니다. -1단계: 자바 객체의 타입 알아오기 -2단계: 자바 객체의 타입에서 부터, 호출하려는 메서드의 식별 정보를 알 오기 -3단계: 메서드의 식별 정보를 사용해서 메서드를 호출하기 2단계와 3단계에서 변수의 식별 정보 대신, 메서드의 식별 정보를 사용하는 것만이 달라졌다. 메서드의 식별정보는 jimethodID라는 JNI가 미리 정의해 놓은 타입을 사용한다. 한가지 주의할 점이 있다면 메서드의 경우 매개 변수와 값을 가지기 때문에, 이런 매개변수와 반환값을 Native Method가 이해할 수 있도록 특수한 처리를 해주어 한다. MethodControl.ja.. 더보기
[jni]객체 필드에 접근하기 -자바에서, 객체의 변수에 접근하려면 그 객체의 이름과 변수의 이름을 알아야 한다. 마찬가지로 Native Method역시 자바 객체의 변수에 접근하기 위해서 그 객체의 타입과, 변수의 식별 정보를 컴퓨터에 인식시켜줄 필요가 있다. ※예를 들어 자바의 int형 데이터 타입의 변수에 접근하기 위해서는,Native Method에 자바의 객체 타입(클래스)과 변수의 식별 정보인 변수 이름과 변수 타입을 알려 주어야 한다. FieldControl.java(맴버변수를 생성한 자바 소스 코드) public class FieldControl { int int_a = 10; double double_b = -1.2345; static { System.loadLibrary("control"); } public nativ.. 더보기
[jni]문자열 전달 인자 -자바에서 String은 16비트의 Unicode 문자 세트로 사용한다. -C에서는 일반적으로 8비트의 문자열을 표현한다. jstring의 잘못된 사용법 JNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv *env, jobject obj , jstring prompt) { printf("%s", prompt); ... } -자바의 String을 Native Method가 정상적으로 접근하고 조작하려면, 자바의 String을 Native Method가 인식 가능한 형태로 변환 시켜줘야 한다. JNI는 자바의 16비트 유니코드 문자열과 C언어의 8비트 문자열 사이의 변환을 위해 UTF-8 포맷을 사용한다. UTF-8 포맷은 자바가 사용하는 16비트 유니코드 중에서도.. 더보기
[jni] 숫자 인자와 변환값 -자바와 다른 언어간의 기본형 데이터 타입의 차이를 해결 하기 위해서,JNI는 아래 표와 같이 Native Method가 자바의 기본형 데이터에 접근할 수 있도록 미리 정의된 데이터 타입들을 제공 Java Type Native Type Size in bits Boolean jboolean 8, unsigned Byte jbyte 8 Char jchar 16, unsigned Short jshort 16 Int jint 32 Long jlong 64 Float jfloat 32 double jdouble 64 void void n/a 표 20-1 Native Method를 위해 제공되는 JNI에서 정의된 데이터 타입 Calculator.java(간단한 숫자계산을 위한 Native Method 선언) pub.. 더보기
[JNI] 단계별 설명 (기본) 1단계: 자바 클래스 생성 public native void printHelloWorld() - 키워드 native 선언 - 컴파일러에게 실제 이 메서드의 구현은 외부에 다른 언어로 구현 될 것이라는 것을 명시 System.loadLibray("helloworld") - 실제로 Native Method와 연결을 위해서는 자바가상머신이 실제 Native method를 찾아서 실행 해 줄 수 있도록 Native Method가 구현되어 있는 라이브러리를 가져오는 작업 - C언어의 helloworld.dll을 만들고 이것을 자바 클래스로 로딩 - 라이브러기 동적 로딩 - 주의: 라이브러리는 Native Method가 호출 되기전에 반드시 로딩 되어야 함 HelloWorld.java(라이브러리를 로딩할 자바 파일.. 더보기
[엑스맨: 퍼스트 클래스] 그들의 흥미로운 과거 영화: 엑스맨: 퍼스트 클래스 감독: 매튜 본 출연: 제임스 맥어보이, 마이클 패스벤더, 제니퍼 로렌스 좋은 영화, 좋은 소설들은 캐릭터들의 과거나 외전이 너무 궁금하다. 마치 그들이 실존하는 것처럼 팬이 되어 어렸을때부터 비밀이야기까지 모든것을 알고 싶게한다. 그런 영화가 엑스맨이다. 늙은 찰스나 매그네토만 보다가 젊었을때의 엑스맨 초창기 이야기는 매우 흥미롭게 다가온다. 엑스맨의 또다른 시리즈인 "울버린의 탄생"을 보신분들은 당연히 "퍼스트 클래스"를 볼 것이라 믿는다. 그들의 이야기는 마치 인기 연예인의 사생활을 보는듯하다. 궁금하고 흥미롭다. 영화가 끝나면 또 다른 이야기가 나오길 기대하게 된다. 더보기
[17어게인] 마음뿐인 사랑은 사랑이 아니다 영화: 17어게인 감독: 버 스티어스 출연: 잭 에프론, 레슬리 만, 매튜 페리 평범한 회사원인 주인공과 그의 아내는 서로를 사랑한다. 하지만 아내는 왜 이혼을 하자고 했을까? 서로 사랑하는데 왜 헤어지려고 할까? 문제는 지루함에 있다. 신상품은 그때뿐이지 몇일이 지나면 무덤덤해 진다. 2년짜리 약정이 걸린 최신 스마트폰일지라도 몇달 후면 처음의 호기심은 없어진다. 아내가 젊었을때의 주인공을 봤을때, 어렸을적 풋풋했던 사랑의 감정이 되새겨졌을 것이다. 결혼한후 자식을 키우면서 서로간에 긴장감없는 지루한 삶의 반복에 지쳐왔던 것이다. 재미없는 장난감은 버려질뿐이다. 마음뿐인 사랑은 재미없는 장난감과 같다. 처음에 사랑했던 묘한 긴장감을 생각해 보자. 보고싶고 말하고싶고 느끼고 싶었던 달콤했던 처음을 다시 .. 더보기