• 締切済み

JNI 戻り値の渡し方について

javaからCのdllを呼出すJNIを作っています。 やりたい事は ・C側で実行した結果がchar[256]に設定され、戻り値としてjava側に渡される。 ・java側でその中身を編集する ですが、java側で例外が発生します。 jcharArrayと言う型に入れさえすれば良いと思ってたのですが・・・ char[]をjava側で見る&編集する方法をどなたかご教授ください・・・。 よろしくお願いします。 ----------jnitest.dll---------- #include "stdafx.h" #include "../../JNI_test.h" #include <Windows.h> #include <stdio.h> #ifdef _MANAGED #pragma managed(push, off) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } #ifdef _MANAGED #pragma managed(pop) #endif JNIEXPORT jcharArray JNICALL Java_JNI_1test_getScreenData(JNIEnv *env, jobject obj){ LONG ret; LONG id; char buff[256]; LPVOID lpvoid; DWORD len = 0; memset(buff,0x00,sizeof(buff)); lpvoid = buff; len = sizeof(buff); ~ここでbuffに値を設定する~ jcharArray result = (jcharArray)buff; return result; } ----------JNI_test.java---------- public class JNI_test { public native char[] getScreenData(); static{ System.loadLibrary("jnitest"); } public static void main(String[] args) { JNI_test jniObj = new JNI_test(); char[] kekka = jniObj.getScreenData(); System.out.println("出力内容:"+kekka);←ここで例外発生。 } }

みんなの回答

回答No.2

#1です。スミマセン訳のわからないことを書いてしましました。 下記を参照してください↓ http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25675&forum=12&1

回答No.1

詳しいことは解りませんが、 JAVAでは連想配列(perlなどでいうハッシュ)の記述法が違います。 C++などとは違い特殊なクラスで連想配列をあつかいます。 char[]の場合単なるcharという名前の配列(スカラー値のみ設定可能) になります。 http://www.stackasterisk.jp/tech/java/java01_14.jsp