1

私のJavaアプリケーションは、入力値を使用してCppライブラリを呼び出して計算を行い、結果を返す必要があります。

入力データがいくつかあります: a short[]、いくつかintの s 、およびfloats で、出力には 2 つのshort[]、いくつかintsおよびfloats が含まれているため、2 つの Java オブジェクトを渡して Cpp 側に渡すと考えinputObjectられoutputObjectます。Cpp 側では、これらのgetXXX()メソッドとsetXXX()メソッドを呼び出して、入力と出力を取得します。

これらのgetメソッドとsetgetMethodIDメソッドを呼び出すには、Cpp側で必要があることを知っています。しかし、intのように、利用可能なものが見つかりません。CallShortArray()CallIntMethod()

方法はありますか?

入力データ部分を回避するために、上記なしで個々の入力パラメーターを渡すことができます。inputObjectしかし、出力 short[] については、それなしでそれを行う方法を見つけることができませんoutputObject

もう 1 つの質問は、 getMethodIDメソッドの最後のパラメーターに関するものです。さまざまなメソッドの署名文字列を教えてくれるドキュメントはありますか?

4

1 に答える 1

2

配列は単なるオブジェクトです。したがって、 a を返す関数がある場合short[]、それを で呼び出してCallObjectMethod()結果を a として取得しjobject、それを a にキャストできますjshortarray

最後のパラメーター ( sig)がどのように機能するかについての説明は、 Type SignaturesGetMethodID()の説明を参照してください。メソッドの各パラメーターとその戻り値の型シグネチャを決定し、それらを適切に組み合わせる必要があります。たとえば、次の方法があります。

long f (int n, String s, int[] arr); 

上記のリンクの表に従って、これらの型シグネチャを持つ 3 つの引数があります。

I                     (int)
Ljava/lang/String;    (java.lang.String)
[I                    (int[])

また、戻り値の型シグネチャがJ(for long) です。したがって、これらすべてを"(" arg-types ")" ret-typeテンプレートと組み合わせると、完全な署名は次のようになると判断できます。

(ILjava/lang/String;[I)J
于 2013-04-30T19:33:18.720 に答える