8

test.cpp に単純な jni 関数があります。

#include <jni.h>
#include <stdio.h>

extern "C" {

JNIEXPORT jint JNICALL Java_dri_put(JNIEnv* env, jstring js, jint ji){

    printf("%d \n", ji);
    int t = ji;
    printf("%d \n", t);
    int k = -3412;
    return k;
 }
 }

私のJavaクラスjavatest.java:

public class javatest {
  public static void main(String args[]) {
    System.loadLibrary("test");
    int t = 134;
    int k = dri.put("a", 5641);
    System.out.println(k);
  }
 }

出力は、渡された整数の乱数を出力するだけです:

1075968840

1075968840

-3412

ただし、ジントを jdouble に変更して Java double 変数を渡すと、問題なく動作します。ここで助けていただければ幸いです。

dri Java クラスは次のとおりです。

public class dri
{
  public final static native int put(String jarg1, int jarg2);
}

sizof(int) は私のマシンで 4 バイトになります (red-hat)

4

1 に答える 1

12

署名が正しくありません(javahを使用しましたか?)。JNI関数の2番目の引数は、オブジェクト(オブジェクトメソッドの場合)またはクラス(静的クラスメソッドの場合)になります。

代わりに、宣言は次のようになります。

JNIEXPORT jint JNICALL Java_dri_put(JNIEnv* env, jclass cls, jstring js, jint ji);
于 2012-05-24T18:43:23.617 に答える