ファイヤープロジェクト
nativeメソッドの引数(プリミティブ型)
2003-07-20T15:13+09:00   matsu
nativeメソッドから引数を渡せなければ,あんまり嬉しくない.なので,ここではいろんなプリミティブ型の引数を渡しみる.
私の環境では/usr/lib/j2sdk1.3/includeの/usr/lib/j2sdk1.3/include/jni.hとlinux/jni_md.hで,プリミティブ型のCでの型は以下のようにマッピングされているようだ.
javaCtypedefされた名前(Javaネイティブ型)
bytesigned charjbyte
shortshortjshort
charunsigned shortjchar
intlongjint
longlong longjlong
floatfloatjfloat
doubledoublejdouble
booleanunsigned charjboolean
jbooleanはJNI_TRUEとJNI_FALSEをとる.Javaでは各型のバイト数が厳密に定義されている.すなわちCのように実装依存ではない.この両者の違いをJavaネイティブ型によって吸収し,Javaとネイティブコード間での互換性を保証する.念のためJavaの各型のバイト数を示しておく.
Javaのプリミティブ型バイト数
byte8ビット(1バイト)
short16ビット(2バイト)
char16ビット(2バイト)
int32ビット(4バイト)
long64ビット(8バイト)
float32ビット(4バイト)
double64ビット(8バイト)
boolean1ビット
ではこれらを渡すサンプルを作成してみる.まずjava部分.
javahで以下のヘッダファイルができる.
でC部分を以下のようにしてみた.
で実行.
$ java Sample2
got byte argument       1
got short argument      2
got char argument       3
got int argument        4
got long argument       5
got float argument      6.000000
got double argument     7.000000
got boolean argument    1
got boolean argument    0
と,プリミティブ型は調査なしのぶっつけ(そしてやっつけ)でできた.それだけにこのページの情報量は少ない.
matsu(C)
Since 2002
Mail to matsu