Burt.K

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

Boolean 형 데이터 값 주고 받기

Boolean 데이터를 주고 받는 예제를 작성한다. 

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

jboolean toggle
(
	JNIEnv		*env,
	jobject		thiz,
	jboolean		value
)
{
	return !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;
	}
	
	JNINativeMethod	nm[1];
	nm[0].name = const_cast<char *>("toggle");
	nm[0].signature = const_cast<char *>("(Z)Z"); // boolean을 받고 boolean을 반환하는 함수 시그니쳐
	nm[0].fnPtr = reinterpret_cast<void *>(toggle);
	
	jclass cls = env->FindClass("Client");
	env->RegisterNatives(cls, nm, 1);
	return JNI_VERSION_1_6;
}

위의 코드에서 함수 시그니쳐에 대한 내용은 “메서드등록” 글을 참고한다.  컴파일해서 libparbool.jnilib 파일을 만든다.

$ g++ "-I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/" -c PassAndReturnBool.cpp
$ g++ -dynamiclib -o libparbool.jnilib passandreturnbool.o

위 네이티브 라이브러리를 사용하는 Java클래스를 작성한다.

$ vi Client.java
public class Client {

    private native boolean toggle(boolean value);

    public static void main(String[] args) {
        
        Client client = new Client();

        System.out.println("toggle(true) is " + client.toggle(true));
        System.out.println("toggle(false) is " + client.toggle(false));
    }

    static {
        System.loadLibrary("parbool");
    }
}

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

$ javac Client.java
$ java Client
toggle(true) is false
toggle(false) is true

 

← Int 데이터 값 주고 받기
Double 형 데이터 주고 받기 →