現在、SWIG/jniを使用してAndroidアプリのjavaからC++関数を呼び出しています。しかし、関数がjstringを返すたびに難しいです。 L()のjava/LANG /文字列JNI_OnLoadエラー:signature()でネイティブ関数のdeclを見つけることができませんLjava/lang/String
ERROR:; .plugin_nameネイティブLCOM /例/ swigJNIため供述見つけることができません:私は
ERROR ...アプリケーションの起動時にLogCatに次のエラーを取得します:ネイティブLCOM /例/ swigJNIため供述見つけることができません。.plugin_description:L()のjava/LANG /文字列
ここでは調べることが役に立つかもしれないいくつかのコードです...
SWIGはラッパーコードを生成:
SWIGEXPORT jstring JNICALL Java_swigJNI_1plugin_1name(JNIEnv *jenv, jclass jcls) {
jstring jresult = 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
result = (char *)plugin_name();
if (result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
SWIGEXPORT jstring JNICALL Java_swigJNI_1plugin_1description(JNIEnv *jenv, jclass jcls) {
jstring jresult = 0 ;
char *result = 0 ;
(void)jenv;
(void)jcls;
result = (char *)plugin_description();
if (result) jresult = jenv->NewStringUTF((const char *)result);
return jresult;
}
JNIネイティブメソッドの宣言:私がJNI_OnLoadを(実行することに成功してきた
static const JNINativeMethod methods[] = {
{"plugin_name", "()Ljava/lang/String", (void*) Java_swigJNI_1plugin_1name},
{"plugin_description", "()Ljava/lang/String", (void*) Java_swigJNI_1plugin_1description}
};
)とRegisterNativesを()関数はint型のを返すとき、ただし、文字列は、私にとって非常に問題となっています。私はこれらの機能がどのように見いだされていないのかをよく理解していません。私が紛失しているものがありますか?
はい、SWIGで生成されたC++ラッパーの先頭にあるファイル(plugin.h)に各ネイティブ関数を宣言しました。私はこれがC++の文字列とAndroidのNDKの問題かもしれないと思っています... – digitalmouse12