5

を使おうとしていますQAndroidJniObject。テストとして、2 つの Java 関数を呼び出しています。1 つは int を返し、もう 1 つは文字列を返します。

int を返す場合、このコードは正常にコンパイルされます。

jint a = QAndroidJniObject::callStaticMethod<jint>("HelloJava", "getInt");

しかし、文字列を返す関数を呼び出すように変更すると、失敗します。

jstring b = QAndroidJniObject::callStaticMethod<jstring>("HelloJava", "getString");

で失敗します

エラー: '_jstring* QAndroidJniObject::callStaticMethod<_jstring*>(char const*, char const*)' への未定義の参照

はテンプレート関数であるためQAndroidJniObject::callStaticMethod、ある型では定義されているが、別の型では定義されていないのはどうすればよいでしょうか?

編集:実際には、 、 、 、 などでテストしたところですjobjectjbyteArrayこれjbooleanArrayjbyte私が見つけjbooleanたものです。jshortjintjlongjbooleanundefined reference

4

2 に答える 2

5

次の表でわかるように、整数型はプリミティブですが、残りはオブジェクト型です。したがって、代わりに以下を使用することをお勧めします。

jstring b = QAndroidJniObject::callStaticObjectMethod<jstring>("HelloJava", "getString")

これはバグではなく、機能です。公式のスタンスについては、このイシュー トラッカー エントリを参照してください。

QAndroidJniObject/jstring : 参照なし

于 2014-12-06T12:15:00.903 に答える
3

これを試して:

 QAndroidJniObject jb = QAndroidJniObject::callStaticObjectMethod("HelloJava", "getString", "()Ljava/lang/String;");
 QString b = jb.toString();
于 2016-07-05T02:09:19.150 に答える