JNI 에서 배열 매개변수로 넘기기

JNI 사용하면서 배열 넘겨서 내부에서 데이터 입력하는게 있는데 javah를 쓰면 알아서 적당한 타입으로 바꿔줌.

예를 들어 int[]를 사용하면 jintArray 로 바꿔줌.
인터넷 검색해보니 거의 대부분이 j변수타입Array 명이더군요.

문제는 이거 그냥 쓸수가 없더군요.
사유는 C 에서 배열은 연속된 메모리 배열이지만 자바에서 배열은유저 입장에선 연속된 배열이지만 실제 메모리상에선 그렇지 않다고 하더군요 그래서 사용하기 전에 해줘야 하는게 있습니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
jintArray inPixels //매개변수로 들어오는것
jint *pInPixels;
int size;
jboolean isCopy = false;
size = env->GetArrayLength(inPixels);
pInPixels = env->GetIntArrayElements(inPixels, &isCopy);
//배열 사용
int aaa = pInPixels[0];
pInPixels[0] = 2;
env->ReleaseIntArrayElements(inPixels, pInPixels, 0);
jintArray inPixels //매개변수로 들어오는것 jint *pInPixels; int size; jboolean isCopy = false; size = env->GetArrayLength(inPixels); pInPixels = env->GetIntArrayElements(inPixels, &isCopy); //배열 사용 int aaa = pInPixels[0]; pInPixels[0] = 2; env->ReleaseIntArrayElements(inPixels, pInPixels, 0);
jintArray inPixels //매개변수로 들어오는것

jint *pInPixels;
int size;
jboolean isCopy = false;
 
size = env->GetArrayLength(inPixels);
pInPixels = env->GetIntArrayElements(inPixels, &isCopy);

//배열 사용
int aaa = pInPixels[0];
pInPixels[0] = 2;

env->ReleaseIntArrayElements(inPixels, pInPixels, 0); 

뭐 이정도 나머진 융통성을 발휘해서


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다