0

私のテストでは、C から Java を呼び出してlong型引数を渡したいのですが、Java メソッドで型を使用するとlong、渡された引数を正しく取得できません。常に 4294967297 です。int、すべて問題ありません。何が問題なのか知っている人はいますか?

ジャワ:

public static void test(long num) {
    Log.d("test", "xxxxxxxxxxx:%ld" + String.valueOf(num));
}

子:

void test_jni()
{
    long num = 5000;
    jclass theClass = (*currentJNIEnv)->FindClass(currentJNIEnv, "me/example/something/TestClass");
    if (NULL != theClass) {
        jmethodID mid = (*currentJNIEnv)->GetStaticMethodID(currentJNIEnv, theClass, "test", "(J)V");
        if (mid == 0) return;
        (*currentJNIEnv)->CallStaticVoidMethod(currentJNIEnv, theClass, mid, num);
    }
}
4

2 に答える 2

6

longJava では常に 64 ビット整数型でありlong、C では 32 ビット整数型である可能性があります (少なくとも x86 32 ビット Linux では)。だから彼らは違う。だからゴミが出る。

C では、十分に長い整数データ型に型定義されている のjlong代わりに使用します。long

于 2013-09-14T12:42:24.237 に答える
2

Java long を表す typedef "jlong​​" があります。引数を宣言するには、「long」の代わりに使用します。システムの long とは異なるサイズである可能性があります。

于 2013-09-14T12:47:48.243 に答える