3

クラスに文字列配列フィールドを設定しようとしていますが、あらゆる種類の問題が発生しています。これは私がこれまでに持っているものです:

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]

私が間違っていることは何ですか?どんな助けでも大歓迎です。

4

1 に答える 1

3

更新-jobjectの代わりにjarrayを使用するという以前の推奨事項は正しくありませんでした。私は古いドキュメントを見ていました。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;
}
于 2012-09-28T16:16:28.497 に答える