繁体   English   中英

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

[英]How to set a field from C++ to Java, using JNI

我有一个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的东西,但是要寻找字符串。

这可能吗?如果可以,怎么办?

谢谢

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

请参阅JNI文档中的访问静态字段

编辑:示例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);

您是否已经检查过http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html PS singleCallback的第二个参数可能应该是jobject类型(此)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM