博客
关于我
jna 调用c++ dll 返回复杂结构体
阅读量:305 次
发布时间:2019-03-03

本文共 698 字,大约阅读时间需要 2 分钟。

在Java中定义结构体类似于C++中的结构体

通过多次尝试和验证,我们确定在Java中定义与C++类似的结构体是可行的。以下是实现细节和代码示例

结构体定义

在Java中,通过继承Structure类并实现Structure接口,可以定义类似于C++结构体的对象。在本例中,我们定义了一个Location类,其中包含两个字段:numsarrarr字段为一个整数数组,大小为10。我们使用public static class来定义内部类,并通过@Override protected List.getFieldOrder()方法指定字段的访问顺序。

DLL函数定义

DLL中的函数定义使用DLL_EXPORT预处理器指令,并接受Location对象的引用作为参数。返回值为布尔值,表示操作是否成功。以下是函数定义示例:

DLL_EXPORT bool get_location_message(double lat, double lon, Location& location);

引用类型传递

在Java中,Location类实现了Structure接口,确保可以通过引用传递。在调用DLL函数时,我们需要创建一个Location实例,并将其传递给目标函数。以下是调用示例:

CLibrary.Location l = new CLibrary.Location();CLibrary.INSTANCE.get_location_message(lat, lon, l);

通过这种方式,我们可以确保Location对象在Java和DLL之间有效传递,并且不会出现数据丢失或引用失效的问题

转载地址:http://rtim.baihongyu.com/

你可能感兴趣的文章
Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
查看>>
Openlayers高级交互(2/20):清除所有图层的有效方法
查看>>
Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
查看>>
Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
查看>>
Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
查看>>
Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
查看>>
Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
查看>>
Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
查看>>
Openlayers高级交互(8/20):选取feature,平移feature
查看>>
Openlayers高级交互(9/20):编辑图形(放缩、平移、变形、旋转),停止编辑
查看>>
Openlayers:DMS-DD坐标形式互相转换
查看>>
openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
查看>>
OpenLDAP(2.4.3x)服务器搭建及配置说明
查看>>
OpenLDAP编译安装及配置
查看>>
Openmax IL (二)Android多媒体编解码Component
查看>>
OpenMCU(一):STM32F407 FreeRTOS移植
查看>>
OpenMCU(三):STM32F103 FreeRTOS移植
查看>>
OpenMCU(三):STM32F103 FreeRTOS移植
查看>>
OpenMCU(二):GD32E23xx FreeRTOS移植
查看>>
OpenMCU(五):STM32F103时钟树初始化分析
查看>>