首页 > 代码库 > JNA结构体数组
JNA结构体数组
本文主要讲述使用JNA模拟结构体并将结构体数组作为参数传递给对应的方法。
C语言结构体定义如下:
typedef struct Rect { int top; int bottom; int left; int right; } RECT;
JNA模拟该结构体:
需要引入:
import com.sun.jna.*;
import com.sun.jna.ptr.*;
//Rect结构体 public static class Rect extends Structure { //Structure子类中的公共字段的顺序,必须与C语言中的结构的顺序一致,否则会报错! public int top; public int bottom; public int left; public int right; public static class ByReference extends Rect implements Structure.ByReference {} public static class ByValue extends Rect implements Structure.ByValue {} @Override protected List getFieldOrder() { return Arrays.asList(new String[]{"top", "bottom", "left", "right"}); } }现在要给方法传递一个结构体数组对象,如何做呢?
C语言函数:
//rects:结构体数组,len:数组长度 void function(RECT* rects, int len);
JNA模拟如下:
void function(Rect[] rects,int len);
调用方法如下:
int len = 5; //定义数组 Rect[] array = (Rect[])new Rect().toArray(len); function(array, len);
其实这里主要是创建结构体数组的地方要注意:如果使用下面的方式创建,那就会产生一个空的数组,申请不到空间,现在暂时不知道为什么申请不到空间。
int len = 5; Rect[] array = new Rect[len];这个代码执行后,array=null,也就是创建数组失败了!
希望高手能够帮助解答!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。