小编sos*_*net的帖子

比较JNI对象引用

我通过JNI从c ++调用Java方法.Java方法返回枚举STATUS.我已经在我的c ++代码中有代表枚举的jobject,如下所示:https://stackoverflow.com/a/17441151/3352197

jclass clSTATUS    = env->FindClass("MyClass$STATUS");
jfieldID fidONE    = env->GetStaticFieldID(clSTATUS , "ONE", "LMyClass$STATUS;");
jobject STATUS_ONE = env->GetStaticObjectField(clSTATUS, fidONE);
Run Code Online (Sandbox Code Playgroud)

所以,电话

jobject o = env->CallObjectMethod(jTestobject, test);
Run Code Online (Sandbox Code Playgroud)

返回表示枚举状态的作业,特别是ONE.那么,我怎么知道它返回了哪个枚举?我试图将它与之比较STATUS_ONE,但它们不匹配.

c++ java java-native-interface

6
推荐指数
1
解决办法
1304
查看次数

通过jni将每个引用的参数从C ++传递到Java

我正在尝试通过JNI将每个引用的c ++变量传递给java。首先,我尝试了一些简单的代码:

爪哇

public static void inc(int val) {
  System.out.println("inc called: " + val);
  val++;
}

public static void dec(int val) {
  System.out.println("dec called: " + val);
  val--;
Run Code Online (Sandbox Code Playgroud)

}

这应该简单地使用Java方法增加/减少用c ++代码创建的变量。C ++部分看起来像这样:

C ++

jmethodID jDec = env->GetStaticMethodID(cls, "dec", "(I)V");
jmethodID jInc = env->GetStaticMethodID(cls, "inc", "(I)V");

jint val = 10;

printf("%d\n", val);
env->CallStaticVoidMethod(cls, jDec, &val);
printf("%d\n", val);
env->CallStaticVoidMethod(cls, jInc, val);
printf("%d\n", val);
Run Code Online (Sandbox Code Playgroud)

如您所见,我尝试了每个引用和每个值。

输出量

10
dec called: -401031272
10
inc called: 10
10
Run Code Online (Sandbox Code Playgroud)

在c ++代码中,该值始终为10,在Java中,它要么是地址,要么是值。

如果您能给我一个提示,那就太好了,非常感谢。

c++ java parameters java-native-interface reference

4
推荐指数
1
解决办法
6120
查看次数

标签 统计

c++ ×2

java ×2

java-native-interface ×2

parameters ×1

reference ×1