Re: JNIでのByte[]型の扱いについて

569 views
Skip to first unread message

nandai

unread,
Jan 14, 2013, 9:04:13 PM1/14/13
to android-g...@googlegroups.com
試してないので違うかもしれませんが、

(jbyteArray)env->CallByteMethod(

ではなくて
(jbyteArray)env->CallObjectMethod(

としてみてはどうでしょう。

2013年1月15日火曜日 10時13分54秒 UTC+9 Y-TAKE:
現在JNIを用いてC++のコードでUSB操作を行おうとしており、UsbDeviceConnectionというクラスのメソッドを用いています。
※ドキュメント

やろうとしていることは、C++でUsbDeviceConnectionクラスのメソッドを呼び、その返り値をJAVAのメソッドの引数としてわたす、というものです。
メソッドの返り値がint、String、Booleanのものはうまくいくのですが、返り値がbyte[]であるgetRawDescriptors()メソッドだとどうしてもうまくいきません。
getRawDescriptors()メソッドはC++側で呼べていますが返り値をJAVAに渡すところで落ちます。
byte[]型はC++でどのように扱えばいいのでしょか?
わかる方いらっしゃればご教授お願いします。

【C++ソース】
jmethodID mid_getRawDescriptors = env->GetMethodID(jcUsbDeviceConnection,"getRawDescriptors","()[B");
jbyteArray RawDescriptors = (jbyteArray)env->CallByteMethod( usbDevConn, mid_getRawDescriptors, NULL);//※usbDevConn→UsbDeviceConnectionクラスのインスタンス

jmethodID mid_storeConnection = env->GetMethodID(jcHelloJni,"storeConnection","([B)V");
env->CallVoidMethod( thiz, mid_storeConnection,RawDescriptors);

【JAVAソース】
public void storeConnection( byte[] RawDescriptors ){
    (略)
}

Y-TAKE

unread,
Jan 14, 2013, 9:24:39 PM1/14/13
to android-g...@googlegroups.com
試してみましたがだめでした。

ただCallObjectMethodとしたら今まで出ていたwarningが消えたのでこれを使うのは正しそうです。
ありがとうございました!

2013年1月15日火曜日 11時04分13秒 UTC+9 nandai:

Y-TAKE

unread,
Jan 14, 2013, 10:02:53 PM1/14/13
to android-g...@googlegroups.com
補足です。
JAVAへの引数受け渡しはできているようですが、JAVA内で引数を使用するところで落ちていました。
例:String strRawDescriptors = new String(RawDescriptors);
これは引数が正しくByte列データになっていないということ?

2013年1月15日火曜日 11時24分39秒 UTC+9 Y-TAKE:
Reply all
Reply to author
Forward
0 new messages