如何使用 JNI 将字段从 C++ 设置为 Java
How to set a field from C++ to Java, using JNI
我有一个 java class:
public class LibClass
{
public static String receivedValue;
...native methods...
}
然后在 C++ 代码中,我想从 C++ 设置字符串的值。我不想创建新对象,我只想给字符串赋值。
到目前为止,在 C++ 中我有这个:
JNIEXPORT void JNICALL Java_com_aries_LibClass_singleCallback
(JNIEnv *env, jclass clz, jstring value)
{
jclass clazz = (env)->FindClass("com/aries/LibClass");
}
我正在寻找类似 (env)->SetObjectArrayElement 的东西,但用于字符串。
这可能吗?如果可能,怎么做?
谢谢
您已经检查过 http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html 了吗?
P.S。 singleCallback的第二个参数大概应该是jobject类型(this)。
您将需要方法 "GetStaticFieldID()" 和 "SetStaticObjectField()"。 Java 字符串只是一个对象。 (我假设您知道如何从原生字符串创建 Java 字符串)。
请参阅 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);
我有一个 java class:
public class LibClass
{
public static String receivedValue;
...native methods...
}
然后在 C++ 代码中,我想从 C++ 设置字符串的值。我不想创建新对象,我只想给字符串赋值。
到目前为止,在 C++ 中我有这个:
JNIEXPORT void JNICALL Java_com_aries_LibClass_singleCallback
(JNIEnv *env, jclass clz, jstring value)
{
jclass clazz = (env)->FindClass("com/aries/LibClass");
}
我正在寻找类似 (env)->SetObjectArrayElement 的东西,但用于字符串。
这可能吗?如果可能,怎么做?
谢谢
您已经检查过 http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html 了吗? P.S。 singleCallback的第二个参数大概应该是jobject类型(this)。
您将需要方法 "GetStaticFieldID()" 和 "SetStaticObjectField()"。 Java 字符串只是一个对象。 (我假设您知道如何从原生字符串创建 Java 字符串)。
请参阅 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);