Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从java到C的jni结构_Arrays_Struct_Java Native Interface - Fatal编程技术网

Arrays 从java到C的jni结构

Arrays 从java到C的jni结构,arrays,struct,java-native-interface,Arrays,Struct,Java Native Interface,我有一个问题。在java中,我有一个类 public class s_k { public byte[][] s; public int r; } 在C结构中 typedef struct { unsigned char s[10][10]; int r; } s_k; 有一个函数,java将其作为参数类型s_k进行传递。 如何在C代码中获取并更改它对Java类进行结构反射是没有意义的。它将是Java类的副本,这意味着更改它不会更改原始Java对象。我想您确实希望这些

我有一个问题。在java中,我有一个类

public class s_k {
    public byte[][] s;
    public int r;
}
在C结构中

typedef struct {
  unsigned char s[10][10];
  int r;
} s_k;
有一个函数,java将其作为参数类型s_k进行传递。
如何在C代码中获取并更改它

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

因此,只需将
suk
实例作为
jobject
传递,并使用JNI的强大功能直接访问它:

  • r使用
    GetFieldID
    然后
    SetIntField
  • s再次使用
    GetFieldID
    ,然后使用
    GetObjectField
    (数组是Java中的一个对象),然后使用
    GetByteArrayElements
没有更简单的方法,除非你想深入研究

更新:似乎与您的问题重复:


关于r,一切都很好!GetObjectClass,然后是GetFieldID,然后是GetIntField。但是我和s有困难。GetObjectClass、GetFieldID、GetObjectField和GetByteArrayRegion,但它提供了一些其他数据。这些步骤会有什么问题?简化数据以证明问题。将其设置为一维数组,并使用
GetByteArrayElements
以简单的方式获取整个数组。它不可能是“其他数据”。如果问题仍然存在,请使用特定的代码片段填写新问题。让你的问题集中起来。