17장. 배열 다루기 2/4
$ vi GenIntArray.cpp#include <jni.h>
// 배열 초기화 방식1
jintArray genIntArray
(
JNIEnv *env,
jobject thiz,
jint length,
jint initValue
)
{
// make a new int array
jintArray intArray = env->NewIntArray(length);
// make c-array to set the int array
jint *cintArray = new jint[length];
for(int i=0; i<length; i++) {
cintArray[i] = initValue;
}
// copy c-array to java-array
env->SetIntArrayRegion(intArray, 0, length, cintArray);
delete [] cintArray;
return intArray;
}
// 배열 초기화 방식2
jintArray genIntArray2
(
JNIEnv *env,
jobject thiz,
jint length,
jint initValue
)
{
// make a new int array
jintArray intArray = env->NewIntArray(length);
// get c-array pointer to set intArray
jint *ptrArray = env->GetIntArrayElements(intArray, nullptr);
for(int i=0; i<length; i++) {
ptrArray[i] = initValue;
}
env->ReleaseIntArrayElements(intArray, ptrArray, 0);
return intArray;
}
JNIEXPORT jint JNICALL JNI_OnLoad
(
JavaVM *vm,
void *reserved
)
{
JNIEnv *env;
if(vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6)) {
return -1;
}
JNINativeMethod nm[2] = {
{
const_cast<char*>("genIntArray"),
const_cast<char*>("(II)[I"),
reinterpret_cast<void*>(genIntArray)
}
,
{
const_cast<char*>("genIntArray2"),
const_cast<char*>("(II)[I"),
reinterpret_cast<void*>(genIntArray2)
}
};
jclass cls = env->FindClass("Client");
env->RegisterNatives(cls, nm, 2);
return JNI_VERSION_1_6;
}Last updated