Java Native Method の作り方 (2)
Native Method に引数を渡す

1. Java コードを書く

Bye.java
class Bye {
  public native void displayBye(String name);

  static {
    System.loadLibrary("bye");
  }
}
HelloWorld と同様な main を用意して、Bye.displayBye(String) を呼び出す。そしてこれらの Java コードをコンパイルして、javah -jni で .h ファイルを作る。

2. Native Method コードを書く

ByeImpl.c
#include <jni.h>
#include "Bye.h"
#include <stdio.h>

JNIEXPORT void JNICALL 
Java_Bye_displayBye(JNIEnv *env, jobject obj, jstring name) 
{
    char buf[128];
    const char *str = (*env)->GetStringUTFChars(env, name, 0);
    printf("Bye %s!\n", str);
    (*env)->ReleaseStringUTFChars(env, name, str);
    return;
}

Java の文字列 (String) は、JNI 関数によって必ず native の文字列に変換してから使用する。この変換には GetStringUTFChars を使う。この関数は Unicode と UTF-8 を扱うことが出来る。

文字列を使った後は、ReleaseStringUTFChars を使って、この必ず文字列を解放する。

3. Shared Library を作成する

% cc -G -I/usr/local/jdk1.1.4/include -I/usr/local/jdk1.1.4/include/solaris\
 ByeImpl.c -o libbye.so
この処理後には、libbye.so が作成される。

4. 実行

% java Bye YOSHIDA
Bye YOSHIDA!