JNI: c言語側からJava呼び出し。 

1,088 views
Skip to first unread message

zhangho

unread,
Oct 15, 2009, 5:14:59 AM10/15/09
to Android-SDK-Japan
javaのcom.ServersServiceクラスのgetIpv6を
C言語側から呼び出しでいますけど
何とか連携まではできだ感じです。(Method not found: 'getIpv6' '(I;)I' のようなエラーは既に解決済み)

問題なのはCallIntMethod()でgetIpv6関数の戻り値をファイルに出力してみたら
[99]じゃ無くで「-1091242504」とか「11212」とか
変な数値ばっかり出力されています。

getIpv6関数のLog.i()ログも吐き出していないです。
本当に呼び出していないと思いますが、原因はなんでしょうか?

よろしくお願いします。



javaのコード:
public void onCreate() {
setConnecCallback2();
}

public static native void setConnecCallback2();

public int getIpv6(int ipv6){

Log.i("JNI", "Callback from Native Messenger to Java Hello Chat");

return 99;
}

static {
System.loadLibrary("mm");
}


c側コード:
#include <string.h>
#include <jni.h>
#include <stdio.h>
#include <pthread.h>


JNIEXPORT void JNICALL Java_com_ServersService_setConnecCallback2
(JNIEnv *env, jobject this) {

FILE *fd;
    fd = fopen("/sdcard/made.log", "w");

jclass jcCallback = (*env)->FindClass(env,"com.ServersService");

jmethodID mid = (*env)->GetMethodID(env,jcCallback,"getIpv6","(I)I");

int ii = (int)(*env)->CallIntMethod(env, jcCallback ,mid, 444 );


fprintf(fd, "iii is : [%d] \n", ii);
fclose(fd);

return;
}

hc.nakahara

unread,
Oct 16, 2009, 2:01:10 AM10/16/09
to Android-SDK-Japan
中原です。

私も同じような現象に見舞われてハマりました。
Javaサイドの戻り値に問題があるように思えなくていろいろ試した結果
Call<type>Method()でコールする時のパラメータに問題がありました。
(いまだに納得はいってないんですが)
解決策としては明示的にキャストしてやる事で解決できました。

> jmethodID mid = (*env)->GetMethodID(env,jcCallback,"getIpv6","(I)I");
>
> int ii = (int)(*env)->CallIntMethod(env, jcCallback ,mid, 444 );
上記の内容からすると"(I)I"なので
int ii = (int)(*env)->CallIntMethod(env, jcCallback ,mid,
(jint)444 );
とする事で戻り値が正しく取れないでしょうか?

少々確認していないので自身が無いですが確認してみてください。
以上

hc.nakahara

unread,
Oct 16, 2009, 2:30:51 AM10/16/09
to Android-SDK-Japan
連続での投稿すいません
よくよく見ていると
CallIntMethodのパラメータおかしくないですか?
第二引数はJavaオブジェクトなので
int ii = (int)(*env)->CallIntMethod(env, this,mid, (jint)
444 );
になるんじゃないんですかね?
で、jni.hの中のJNIEnvの定義からすると
int ii = (int)(*env)->CallIntMethod(this,mid, (jint)444 );
になるのでは無いでしょうか?

以上

zhangho

unread,
Oct 16, 2009, 3:55:16 AM10/16/09
to Android-SDK-Japan
すみません。
この問題は既に解決しました。

下記のスレッドです。
http://groups.google.co.jp/group/android-group-japan/browse_thread/thread/49d865163b1da544?hl=ja
Reply all
Reply to author
Forward
0 new messages