Burt.K

코코아를 좋아하는 프로그래머입니다 ;)

Short 데이터 주고 받기

두 개의 값을 전달해 최대값을 반환하는 함수를 작성해 보자. 

$ vi PassAndReturnShort.cpp
#include <jni.h>

jshort max
(
    JNIEnv      *env,
    jobject     thiz,
    jshort      a,
    jshort      b
)
{
    if( a > b )
        return a;
    return b;
}

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 {
        const_cast<char *>("max"),
        const_cast<char *>("(SS)S"),
        reinterpret_cast<void *>(max)
    };
    
    jclass cls = env->FindClass("Client");
    env->RegisterNatives(cls, &nm, 1);
    return JNI_VERSION_1_6;
}

컴파일하고 라이브러리로 만든다.

$ g++ "-I/System/Library/Java/JavaVirtualMachines/Current/" -std=c++11 -c PassAndReturnShort.cpp
$ g++ -dynamiclib -o libparshort.jnilib passandreturnshort.o

라이브러리를 사용하는 자바 코드를 작성한다.

$ vi Client.java
public class Client {

    public native short max(short a, short b);
    
    public static void main(String[] args) {
        
        Client client = new Client();
        
        System.out.println("choose the max value between 10, 20 : " + client.max((short)10, (short)20));
        System.out.println("choose the max value between 50, 10 : " + client.max((short)50, (short)10));
    }
    
    static {
        System.loadLibrary("parshort");
    }
}

자바 코드를 컴파일하고 실행한다.

$ javac Client.java
$ java Client
choose the max value between 10, 20 : 20
choose the max value between 50, 10 : 50

 

← Long 데이터 주고 받기
char 데이터 주고 받기 →