如何使用JNI将字段从C ++设置为Java

时间:2015-03-10 15:14:07

标签: java c++ java-native-interface

我有一个java类:

public class LibClass
{
    public static String receivedValue;
    ...native methods...
}

然后在c ++代码中,我想从C ++设置String的值。我不想创建新对象,我只想为String赋值。

在C ++中我到目前为止:

JNIEXPORT void JNICALL Java_com_aries_LibClass_singleCallback
  (JNIEnv *env, jclass clz, jstring value)
{
    jclass clazz = (env)->FindClass("com/aries/LibClass");

}

我正在寻找像(env) - > SetObjectArrayElement这样的东西,但是对于字符串。

这是可能的,如果是的话,怎么样?

由于

2 个答案:

答案 0 :(得分:2)

您将需要方法“GetStaticFieldID()”和“SetStaticObjectField()”。 Java String只是一个对象。 (我假设您知道如何从本机字符串创建Java String。)

请参阅JNI文档中的Accessing Static Fields

编辑:示例C(不是C ++)代码(省略错误检查)

jstring str;
JNIEnv *env;
jclass clazz;
jfieldID fid;

// initialize str and env here ...

clazz = (*env)->FindClass(env, "my/package/MyClass");
fid = (*env)->GetStaticFieldID(env, clazz , "myField", "Ljava/lang/String;");
(*env)->SetStaticObjectField(env, clazz, fid, str);

答案 1 :(得分:0)

您是否已查看http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html? 附: singleCallback 的第二个参数应该是 jobject 类型(this)。