double 데이터형 값 주고 받기

double 데이터형 값을 전달하면 해당 값의 제곱근을 반환하는 예제를 만들어 보자.

#include <jni.h>
#include <cmath>

jdouble square
(
    JNIEnv      *env,
    jobject     thiz,
    jdouble     value
)
{
    return std::sqrt(value);
}

JNIEXPORT jint JNICALL JNI_OnLoad
(
    JavaVM      *vm,
    void        *reserved
)
{
    JNIEnv  *env;
    if(vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6)) {
        return -1;
    }

    //c++11
    //Brace-Initialization
    JNINativeMethod nm {
                const_cast<char *>("square"),
                const_cast<char *>("(D)D"),
                reinterpret_cast<void*>(square) };

    jclass cls = env->FindClass("Client");
    env->RegisterNatives(cls, &nm, 1);
    return JNI_VERSION_1_6;
}

이번 예제에서는 JNINativeMethod 구조체 초기화 방법으로 C++11 에서 소개된 브레이스 초기화 방법을 사용했다. 자세한 내용은 C++11의 문법책을 참고하길 바란다.

이제 코드를 컴파일해서 라이브러리를 만들어보자.

c++11 기능을 사용하려면 -std 옵션에 c++11 을 주어야 한다. 이제 자바 클래스에서 라이브러리를 사용해 보자.

자바 코드를 컴파일하고 실행해 보자.

Last updated

Was this helpful?