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!