ページ更新: 2004-06-25 (金) (5561日前)

目次

[編集]

HP-UXでのJava2 JNIの使用 #

(未確認:HP-UX手元にないので)

HP-UXでのJava 2 JNIの使用 (日本HP - J2SE for HP-UX - TIPS)

[編集]

JNI側で作成した任意長のchar[]をJavaに返す (未確認) #

動作未確認。自分は以下の操作の代わりに、JNI側でByteBufferを生成して、それをJava側のメソッドを読んで渡しているので。

jsize n;
jbyteArray jbData;
jbyte * msg = "return data";

n = strlen(msg);
jbData = (*env)->NewByteArray(env, n);
(*env)->SetByteArrayRegion(env, jbData, 0, n, msg);

return jbData;
[編集]

GetMethodIDで指定するdescriptor(signature)を調べる #

次のコマンドを使う。

javap -cp classpath -s -p package.to.class.ClassName

[2] p.49, 4.2.2 Forming the Method Descriptor を参照。
この本によると -pは-privateの略のようだ。 (javapを実行したときのヘルプには記載なし)

[編集]

引数のチェック #

JavaVMの -Xcheck:jni オプションを使う

[編集]

Call<type>Methodの注意点 #

Call<type>Method (例: env->CallVoidMethod) の引数は可変引数(...)なので、 可変部分にはプロトタイプチェックが働かない。 また、jobject,jclass,jmethodIDを入れ替えてもエラーにならない。

→対策:jni.hなどのヘッダには目を通しておくこと。

[編集]

J2SDKのバージョンとCygwin gccの-mno-cygwinオプション #

System.loadLibrary()実行時にJavaVMがエラーも出さずに終了する組み合わせがある。

-mno-cygwinなしあり
J2SDK 1.4.2_02okok
J2SDK 1.4.1_05xok
J2SDK 1.3.1_09okok
[編集]

DelphiでJNI #

Using the Java Native Interface with Delphi (MMG & Associates)

[編集]

Cygwin で JNIを使うときの、jni_md.hのエラー #

Writing JNI using GCC on win32 (GNU-Win32 Related Projects)
Cygwin で Java より。

gccを '-mno-cygwin' なしで使うときは、__int64がないので、変わりに long long を使う。
このためにはjni_md.hを次のように書き換えること。

/include/win32/jni_md.h:
  typedef long jint;
+ #ifdef __GNUC__
+ typedef long long jlong;
+ #else
  typedef __int64 jlong;
+ #endif
  typedef signed char jbyte;

あるいは、gcc -c -D__int64="long long" .... のようにするか。(2004-06-18 未確認)

なお、gcc-mingwパッケージをインストールしていて、gccにオプション -mno-cygwin を使用したときは __int64が定義されるため、上記作業は不要。

このときのmingw関連パッケージのバージョン:

$ cygcheck -c | grep -i mingw
gcc-mingw               20030911-4         OK
gcc-mingw-ada           20031020-1         OK
gcc-mingw-core          20031020-1         OK
gcc-mingw-g++           20031020-1         OK
gcc-mingw-g77           20031020-1         OK
gcc-mingw-gpc           20031020-1         OK
gcc-mingw-java          20031020-1         OK
gcc-mingw-objc          20031020-1         OK
mingw-runtime           3.2-1              OK
mingw-zlib              1.1.4-4            OK

ソフト/MinGW Cygwin