プログラム悪戦苦闘日記

はてなダイアリーからの移行(遺物)

いまさらJNI - お約束のHello World

 というわけで、JNIの作り方。
 まずはJava側のインターフェイスでこんなのを用意する。

public class HelloNative {
    static {
        System.loadLibrary("HelloNative");
    }
    
    public static native hello();
}

で、javac でコンパイル。その後C/C++用ヘッダーファイルを作る。

javah HelloNative

HelloNative.hが作られるので、今度はソースファイルを書く。

#include <stdio.h>
#include "HelloNative.h"

// ↓この部分はヘッダーファイルのプロトタイプをコピペ
JNIEXPORT void JNICALL Java_HelloNative_hello(JNIEnv *env, jclass cl)
{
    printf("はろー from Native C!!!\n");
}

ちなみに、C++の場合は extern "C" を付ける。
それで、コンパイル

\bin\vcvars32.bat	←環境変数設定
cl -I\incluse -I\include\win32 -LD HelloNative.c -FeHelloNative.dll

これでDLLができればめでたく終了。Cのprintf()が呼べます。

public class Test {
    public static void main(String[] args) {
        HelloNative.hello();
    }
}