JNIを使用してJavaでC APIを使用しようとしています。私はCプログラマではないよ...ここchar * tab [10]をjavaオブジェクト(JNI)に変換する
はC「オブジェクト」私は変換する必要があります。char *タブ[10]
はまず、私はそれが何を意味するのかわからない:それはありますcharのタブへのポインタ、またはcharへのポインタのタブ? (違いはありますか?)
次に、同等のJavaオブジェクトは何ですか?
JNIを使用してJavaでC APIを使用しようとしています。私はCプログラマではないよ...ここchar * tab [10]をjavaオブジェクト(JNI)に変換する
はC「オブジェクト」私は変換する必要があります。char *タブ[10]
はまず、私はそれが何を意味するのかわからない:それはありますcharのタブへのポインタ、またはcharへのポインタのタブ? (違いはありますか?)
次に、同等のJavaオブジェクトは何ですか?
char * tab [10]は、charの配列(最初の要素の点)へのポインタです。ここで
は、JNIのAPIです: http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/jniTOC.html
JNIで "Cのchar" の型相当jcharです - Javaで、それは "文字" プリミティブ型です。 可能性「C文字」の配列を持つことができることは次のとおりです。existand into Stringオブジェクトをjavaに、ORをJavaプリミティブchar配列にコピーします。 お役立ちリンク: http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html#array_operations
第二の方法は、5月になるようになっています。あなたは、JNI呼び出しにJavaのchar配列を渡したりとCコードから新しいJava配列を作成
新< なPrimitiveType>アレイ関数。しかし、javaの配列へのポインタで終了します。 JNI呼び出しを通過し、Javaの的環境である - jEnvがどこ
jEnv->ReleaseCharArrayElements(javaCharArray, C_CharArray, JNI_COMMIT);
: 彼らは、JavaのいずれかにあなたのCの文字をコピーします。あなたがポインタを持っている場合は、* C_CharArrayのように逆参照する必要があるかもしれません。私はそれがうまくいくかもしれないと思う。
それは、10個の文字列の配列などのように直接的にモデル化されるだろう(ほとんどの場合)です:それは、文字バッファの配列だということも可能ですので、あなたは、StringBuilder
の代わりに使用することがあります
String[] tab = new String[10];
String
。また、Java配列はオブジェクト自体であり、情報が型には付けられないようにサイズを知っていることに注意してください(配列サイズが型特性であるCとは異なります)。
私はJNIを通じてタイプ/値の直接転送を期待していません。そこにいくつかの変換グルーコードが必要です。
これは間違っています - 'tab'は10文字の配列へのポインタではなく、charへの10個のポインタの配列です。 – psmears