- - PR -
JNIでString配列へのフィールドアクセス方法について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-01-29 15:29
JavaからC言語で作成したDLLを呼んでいます。
DLLへの入力はパラメータで渡し、出力はC側からフィールドへアクセスしてデータを返すように書いてます。 Java側のString配列のフィールドへアクセスする方法について教えていただけないでしょうか。 同じロジックでDouble配列も、フィールドへアクセスして値をJava側へ返しているのですが、こちらはうまく動作しています。 Double型では以下のように書いて上手くデータが取得できてます。 Java側------------------------- double[] Score = new double[2]; System.out.println(Score[0]); System.out.println(Score[1]); ------------------------------- C側---------------------------- jfieldID id_dDF = (*env)->GetFieldID(env,cls,"Score","[D"); jobject objScore = (*env)->GetObjectField(env, cObj, id_dDF); double *pdbl = (*env)->GetDoubleArrayElements(env,(jdoubleArray)objScore,0); pdbl[0] = 1.234; pdbl[1] = 9.876; (*env)->ReleaseDoubleArrayElements(env, (jdoubleArray)objScore, pdbl, 0); -------------------------------- 同じようにJava側のString配列へ文字列を返したいのですが、うまくいきません。 よろしくお願いします。 | ||||||||
|
投稿日時: 2008-01-29 17:32
うまくいかないとは、どういう現象でしょうか? Stringなら、期待する動作ができているのですか? うまくいかないというコードを[CODE]タグで括って載せてみてください。 | ||||||||
|
投稿日時: 2008-01-29 18:17
「返したい」だけで反射で書いてしまったようで…元々Java側から渡してるんですね。
失礼しました。 >NewObjectArray? [ メッセージ編集済み 編集者: mio 編集日時 2008-01-29 19:08 ] | ||||||||
|
投稿日時: 2008-01-29 18:18
Stringはプリミティブ型ではないので、JNIでdouble型と同じように扱うことができません。 こんな感じで、どうですか?
| ||||||||
|
投稿日時: 2008-01-29 19:22
yos様、mio様、Tdnr_Sym様
返信ありがとうございました。 また、投稿では拙い文章で申し訳ありませんでした。
double型と同じ方法を真似しても、コンパイルすら出来ない状態でした。 double型とは同じように扱えないのですね。 String型ではうまく出来たのですが、double型で配列のフィールド取得に成功するまでは、200個くらいの変数をJava側に宣言してたので、これではあまりにも・・と思い配列を使うように修正を始めたのですが、Stringの配列でつまづいていた次第です。 サンプルプログラムまで書いていただいて、大変助かりました。 おかげさまで、Java側のString配列にデータがうまく入りました。 これを参考に実際のプログラムに組み込んでいきます。 皆さま、ありがとうございました。 |
1