🤖
JNI Tutorial
  • Introduction
  • 저자소개
  • Introduction
  • Hello JNI
  • 메서드 등록
  • int 데이터형 값 주고 받기
  • boolean 데이터형 값 주고 받기
  • double 데이터형 값 주고 받기
  • float 데이터형 값 주고 받기
  • long 데이터형 값 주고 받기
  • short 데이터형 값 주고 받기
  • char 데이터형 값 주고 받기
  • byte 데이터형 값 주고 받기
  • JNI에서 문자열 다루기 1/3
  • JNI에서 문자열 다루기 2/3
  • JNI에서 문자열 다루기 3/3
  • 레퍼런스 이해하기
  • 배열 다루기 1/4
  • 배열 다루기 2/4
  • 배열 다루기 3/4
  • 배열 다루기 4/4
  • 중간 요약
  • 자바 클래스 찾기 1/2
  • 자바 클래스 찾기 2/2
  • 정적 메서드 찾기
  • 정적필드 찾기
  • 자바 클래스 인스턴스 생성하기
  • 자바 클래스 인스턴스 메서드 찾기
  • 자바 클래스의 인스턴스 필드 찾기
  • 네이티브 쓰레드 실행하기
  • 작성 중...
Powered by GitBook
On this page

Was this helpful?

float 데이터형 값 주고 받기

반지름을 전달하면 원의 넓이를 반환하는 예제를 만들어 보자.

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

jfloat circleArea
(
    JNIEnv      *env,
    jobject     thiz,
    jfloat      radius
)
{
    return 3.141592 * radius * radius;
}

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 *>("circleArea"),
        const_cast<char *>("(F)F"),
        reinterpret_cast<void *>(circleArea)
    };

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

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

$ g++ "-I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/" -std=c++11 -c PassAndReturnFloat.cpp
$ g++ -dynamiclib -o libpardouble.jnilib passandreturndouble.o

자바 코드에서 라이브러리를 사용해 보자.

$ vi Client.java
public class Client {

    public native float circleArea(float radius);

    public static void main(String[] args) {

        Client client = new Client();

        System.out.println("circle radius is 1. The area is " + client.circleArea(1));
        System.out.println("circle radius is 5. The area is " + client.circleArea(5));

    }

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

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

$ javac Client.java
$ java Client
circle radius is 1. The area is 3.141592
circle radius is 5. The area is 78.5398
Previousdouble 데이터형 값 주고 받기Nextlong 데이터형 값 주고 받기

Last updated 5 years ago

Was this helpful?