2012-10-16 97 views
1

我有一个问题。在Java我在C等jni从java结构到C

public class s_k { 
    public byte[][] s; 
    public int r; 
} 

类相应的结构,

typedef struct { 
    unsigned char s[10][10]; 
    int r; 
} s_k; 

和具有从中穿过的java此作为参数类型S_K的一个功能。 如何获取它的C代码并将其更改为

回答

2

对Java类进行结构反射没有意义。这将是您的Java类的副本,这意味着更改它不会更改原始Java对象。我想你确实希望更改反映在原始对象中,对吗?

所以简单地传递s_k实例作为jobject,并直接与JNI的权力访问它:

  • řGetFieldID然后SetIntField
  • 小号再次用GetFieldID,然后GetObjectField(数组是Java中的对象),然后GetByteArrayElements

没有简单的方法,除非你想深入探索JNA

UPDATE:似乎是你的问题的重复:

How to access arrays within an object with JNI?

+0

关于R一切正常! GetObjectClass然后GetFieldID然后GetIntField。但我有困难与s。 GetObjectClass然后GetFieldID然后GetObjectField和GetByteArrayRegion,但它给了我一些其他的数据。这个步骤有什么问题? – MAB

+0

简化您的数据以证明问题。使它成为一维数组并使用'GetByteArrayElements'以一种简单的方式获取整个数组。它根本不能是“一些其他数据”。如果问题仍然存在,请使用特定的代码段填写新问题。专注于你的问题。 –