class Bye { public native void displayBye(String name); static { System.loadLibrary("bye"); } } |
#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 を使って、この必ず文字列を解放する。
% cc -G -I/usr/local/jdk1.1.4/include -I/usr/local/jdk1.1.4/include/solaris\ ByeImpl.c -o libbye.soこの処理後には、libbye.so が作成される。
% java Bye YOSHIDA Bye YOSHIDA!