gpt4 book ai didi

arrays - JNI设置静态字段字符串数组

转载 作者:行者123 更新时间:2023-12-02 02:17:43 25 4
gpt4 key购买 nike

我试图在我的类中设置一个字符串数组字段,但遇到了各种各样的问题。这是我到目前为止所拥有的:

JNIEXPORT jint JNICALL Java__Names1_GetMyNames(JNIEnv *env, jobject obj)
{
jfieldID myNamesID; /* store the field ID */
int i=0;
jstring myStr;
jobject dev;
char* myNames[] = {"Hello ", "world!"};

// Get a reference to obj’s class
jclass cls = env->GetObjectClass(obj);
// Get static field ID
myNamesID = env->GetStaticFieldID(cls, "myDevNames", "[Ljava/lang/String;");
// Get the object field
dev = env->GetObjectField(obj,myNamesID);

for (i=0; i<2; i++) {
myStr = env->NewStringUTF(myNames[i]);
env->SetObjectArrayElement(dev,i,myStr);
}
return 0;
}

这是我的字符串:

private static String[] myDevNames= new String[12];

当我尝试编译时,出现以下错误:

错误:从“jobject {aka _jobject*}”到“jobjectArray {aka _jobjectArray*}”的无效转换[-fpermissive]

你知道我做错了什么吗?任何帮助将不胜感激。

最佳答案

更新 - 我之前使用 jarray 而不是 jobject 的建议是不正确的。我正在查看旧文档。基于http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html这个怎么样?将 dev 重新定义为 jobjectArray,但您还需要对 GetStaticObjectField 的调用进行强制转换。

JNIEXPORT jint JNICALL Java__Names1_GetMyNames(JNIEnv *env, jobject obj)
{
jfieldID myNamesID; /* store the field ID */
int i=0;
jstring myStr;
jobjectArray dev;
char* myNames[] = {"Hello ", "world!"};

// Get a reference to obj’s class
jclass cls = env->GetObjectClass(obj);
// Get static field ID
myNamesID = env->GetStaticFieldID(cls, "myDevNames", "[Ljava/lang/String;");
// Get the object field
dev = static_cast<jobjectArray>(env->GetStaticObjectField(cls,myNamesID));

for (i=0; i<2; i++) {
myStr = env->NewStringUTF(myNames[i]);
env->SetObjectArrayElement(dev,i,myStr);
}
return 0;
}

关于arrays - JNI设置静态字段字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12643453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com