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,也就是创建数组失败了!

希望高手能够帮助解答!

JNA结构体数组

时间: 2024-10-06 18:41:27

JNA结构体数组的相关文章

JNA结构体参数传递,Java数组

JNA以结构体数组为参数进行调用: Java代码   ////// C++ // student 结构体定义 typedef struct { int age; char name[20]; }Student; // 修改java对象的属性值 JNAAPI bool changeObjs(Student stu[],int size) { for(int i=0;i<size;i++) { stu[i].age*=10; strcpy(stu[i].name,"wokettas"

C#调用C/C++动态库 封送结构体,结构体数组

因为公司一直都是做C++开发的,因客户需要要提供C#版本接口,研究了一下C#,发现其强大简洁, 在跨语言调用方面封装的很彻底,提供了强大的API与之交互.这点比JNA方便多了. Java与C#都只能调用C格式导出动态库,因为C数据类型比较单一,容易映射. 两者都是在本地端提供一套与之映射的C#/java描述接口,通过底层处理这种映射关系达到调用的目的. 一. 结构体的传递 Cpp代码   #define JNAAPI extern "C" __declspec(dllexport) /

【C语言】用结构体数组完成:有5个学生(包括学号,姓名,成绩),要求按照成绩高低输出学生信息

//用结构体数组完成:有5个学生(包括学号,姓名,成绩),要求按照成绩高低输出学生信息 #include <stdio.h> struct Stu { int num; char name[20]; int score; }; int main() { int i,j; struct Stu student[5]={{317,"han",89},{318,"hu",50},{319,"kang",84},{320,"li&q

NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构

本文摘自<用Python做科学计算>,版权归原作者所有. 上一篇讲到:NumPy-快速处理数据--ndarray对象--数组的创建和存取 接下来接着介绍多维数组的存取.结构体数组存取.内存对齐.Numpy内存结构 一.多维数组的存取 多维数组的存取和一维数组类似,因为多维数组有多个轴,因此它的下标需要用多个值来表示,NumPy采用组元(tuple)作为数组的下标.如二维数组需要(x, y)的元组标记一个数组元素:三维数组需要(x, y, z)的元组标记一个元素. 如下图所示,a为一个6x6的二

编程题:指针变量指向结构体数组。

编程题:指针变量指向结构体数组. #include<stdio.h> void main() { struct person {char name[20]; char sex; int age; float height; }per[3]={{"Li Ping",'M',20,175},{"Wang Ling",'F',19,162.5}, {"Zhao Hui",'M',20,178}}; struct person *p; for

编程题:结构体数组的引用。功能:输出结构体数组各元素的成员值

编程题:结构体数组的引用.功能:输出结构体数组各元素的成员值 #include<stdio.h> void main() { struct person { char name[20]; char sex; int age; float height; }per[3]={{"Li Ping",'M',20,175},{"Wang Ling",'F',19,162.5}, {"Zhao Hui",'M',20,178}}; int i;

C语言 结构体(嵌套结构体--结构体数组)

//结构体--嵌套结构体和结构体数组 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _parent{ int num; char name[30]; //结构体内部定义结构体,如果不定义嵌套结构体变量,那么该嵌套结构体的属性则会被当作父结构体的属性 struct son{ int age; char sna

黑马程序员-----结构体数组

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ----- 第一讲  结构体数组 一.结构体数组的概念       数组的元素也可以是结构类型的.因此可以构成结构型数组.结构数组的每一个元素都是具有相同结构类型的下表结构变量.在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体.如一个班的学生

结构体数组

结构体数组 指向结构体指针