2016-10-09 2 views
0

JNI를 사용하여 jobjectArray을 C에서 Java로 전송하고 싶습니다.
현재, 나는 다음과 같은 오류 얻을 :C에서 jobject 생성이 작동하지 않습니다.

SharedTable.c: In function ‘JAVA_model_JNIResultSet_getSpieler’: 
SharedTable.c:116:5: warning: passing argument 4 of ‘(*env)->SetObjectArrayElement’ from incompatible pointer type [enabled by default] 
ret, i, ptr); 

나는 내가하는 jobject을 반환해야 함을 알고를하지만 난 그것을 생성하는 방법을 모르겠어요.

typedef struct _Spieler { 
    char vorname[50]; 
    char nachname[50]; 
    int trikotnummer; 
    struct _Spieler *next; 
} Spieler; 

내 코드가 다음과 같습니다 :
내 구조체처럼 보이는

Spieler *ptr = head; 
jobjectArray ret; 
int i; 
jclass class = (*env)->FindClass(env, "model/Spieler"); 

ret= (*env)->NewObjectArray(env, count, class, NULL); 

for(i = 0; i < count; i++) { 
    (*env)->SetObjectArrayElement(env, ret, i, ptr); 
    ptr = ptr->next; 
} 

return ret; 
+0

전체 예제가 도움이 될 것입니다. –

+3

배열 요소에 c struct를 할당 할 수 없습니다. JNI – talex

+0

으로 자바 객체를 생성해야합니다. 현재 연결된 목록은 { "a", "b", 1}, { "x", "y", 2}와 같이 보입니다. 그것의 jni에 의한 물건? – mafioso

답변

1

제대로 주석 @talex, 당신은 C 구조와 자바 배열을 채울 수 없습니다. 아마도 Spieler 구조체와 같은 Java 클래스를 선언해야하며 루프에서이 Java 클래스의 생성자를 사용하여 배열의 각 요소를 만들면됩니다.

뭔가 같은, 대신 생성자를 사용

public class Spieler { 
    private String vorname; 
    private String nachname; 
    private int trikotnummer; 
    public Spieler(String vorname, String nachname, int trikotnummer) { 
     this.vorname = vorname; 
     this.nachname = nachname; 
     this.trikotnummer = trikotnummer; 
    } 
}; 

는, JNI는 자바 클래스의 필드의 필드 ID를 얻고, (그들은 개인 경우에도)을 개별적으로 설정할 수 있습니다.

+0

나는 당신이 제안한 것처럼했지만 지금은 불만족스러운 링크 오류가 발생합니다. 왜 그런지 알아? http://stackoverflow.com/questions/39954941/unsatisfied-link-error-using-jni보세요. – mafioso

관련 문제