1

次の Java メソッドを検討してください。

public int write(byte[] src, int timeoutMillis) throws IOException {
    System.out.println("Write function started.");
    System.out.println("buffer = " + src.length);
    System.out.println("buffer = " + src[0]);
    return 1;
}

Qandroid JNIを使​​用してc ++からこのメソッドを使用しようとしました。これが私がc ++で書いたコードです:

jbyteArray buffer = env->NewByteArray(3);
jbyte *bytes = env->GetByteArrayElements( buffer, 0);
bytes[0]=1;
bytes[1]=2;
bytes[2]=3;
env->SetByteArrayRegion(buffer,0,3,bytes);
jniObject.callMethod<jint>("write","([Ljava/lang/byte;I)I",buffer,1000);

Java コードの署名によると。callMethod を正しく使用していますか? まったく動かないのはなぜですか?コンソールには何も出力されません!例外もエラーもありません!


ご参考までに、JNIを使​​用してUSBシリアルデバイスを開こうとしています。デバイスを正常に開き、UsbDeviceConnection オブジェクトを取得しました。セリアポートが正常に開かれ、すべてがうまく機能しています。しかし、ここでは書き込み機能は機能しません。機能には全く入っていないようです。エラーは発生しません。問題は、署名文字列またはメソッドに提供したバッファ オブジェクトにあると思いますか? それについてどう思いますか。 助けてくれてありがとう。

4

1 に答える 1

4

の型のシグネチャjbyteArray[B. したがって、メソッド呼び出しは次のようになります。

jniObject.callMethod<jint>("write","([BI)I",buffer,1000);
于 2015-02-28T10:40:51.067 に答える