JNA调用C++动态库,返回二维数组

1.下载eclipse创建一个项目,jdk选择1.8的版本,更高的需要配置下

package mydemo;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.LongByReference;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.Pointer;
import com.sun.jna.Memory;public class Hello {public interface LgetLib extends Library {// 调用linux下面的so文件,注意,这里只要写test就可以了,不要写libtest,也不要加后缀LgetLib INSTANCE = (LgetLib) Native.loadLibrary("EasyLog", LgetLib.class);public int test(Pointer arr, int row, int col);public int get2Darr(Pointer pppFloatOut, IntByReference pLine, IntByReference pColumn);//public void free2Dppt(int line, int column, Pointer ppFloat);}public int test(){            // 传入二维数组            
//            Pointer pointers = new Memory(24);
//            int pointer_size = 8;
//            int int_size = 4;
//            int row = 3;
//            int col = 5;
//            int n = 0;
//            for (int i = 0; i < row; i++) {
//                //分配20字节的内存空间,并且该指针指向这个内存空间的首地址
//                Pointer pointer = new Memory(20);
//                for (int j = 0; j < col; j++) {
//                    pointer.setInt(j * int_size, n);
//                    n += 1;
//                }
//                pointers.setPointer(i * pointer_size, pointer);
//                //这里不要释放内存Native.free(Pointer.nativeValue(pointer));
//            }
//            //调用Dll动态链接库内的getArrSum函数
//            System.out.println(LgetLib.INSTANCE.test(pointers, row, col));
//            System.out.println("释放内存之前,pointers地址:"+pointers);
//            Native.free(Pointer.nativeValue(pointers));
//            Pointer.nativeValue(pointers, 0);//传出二维数组//调用PointerByReference ppFloat = new PointerByReference();Pointer pppFloat = ppFloat.getPointer();IntByReference linePt = new IntByReference();IntByReference columnPt = new IntByReference();//通过获取二维指针的指针,得到三重指针LgetLib.INSTANCE.get2Darr(pppFloat, linePt, columnPt);int line = linePt.getValue();int column = columnPt.getValue();System.out.println("line:"+line+",column:"+column);double[][] values = new double[line][column];//输出一个3行5列的二维数组,即3个指向一行的指针,因此可获取指针数组;// 注意getPointerArray方法必须指明指针数组的数量(此处是line = 3),否则返回的指针数组长度不定,有很多干扰值Pointer[] pointers = ppFloat.getValue().getPointerArray(0, line);for(int i=0;i<line;i++){values[i] = pointers[i].getDoubleArray(0, column);}for(int i=0;i<line;i++){for(int j=0;j<column;j++){System.out.println("values["+i+"]["+j+"]:"+values[i][j]);}System.out.println();}//传入PointerByReference的getValue()//释放内存//LgetLib.INSTANCE.free2Dppt(line, column, ppFloat.getValue());           return 0;}public static void main(String[] args) {Hello ts = new Hello();		ts.test();}}

动态库编译后放到system32下,system下是64位的,SysWow64是32位的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js获取当前日期方法

//获取当前日期函数 gettDate() { let date new Date(), obj { year: date.getFullYear(), //获取完整的年份(4位) month: date.getMonth() 1, //获取当前月份(0-11,0代表1月) strDate: date.getDate(), // 获取当前日(1-31) hour: date.getHours(), //获取当前小时(0 ~ 23)…

【playwright】新一代自动化测试神器playwright+python系列课程00——playwright安装

playwright安装 本文主要分享由微软开发的实现Web UI自动化测试工具Playwright库&#xff0c;相比于之前学习过selenium库&#xff0c;playwright对于编写自动化代码绝对是更轻松了&#xff0c;因为它支持脚本录制&#xff0c;如果只求简单点可以不用写一行代码就能够实现自动…

Spring 启动过程

博文目录 文章目录 内容总结new AnnotationConfigApplicationContextApplicationContext.refresh底层流程 refresh - invokeBeanFactoryPostProcessorsBeanFactoryPostProcessor 内容总结 Spring启动流程详解 通常&#xff0c;我们说的 Spring 启动&#xff0c;就是构造 Appli…

Debezium发布历史68

原文地址&#xff1a; https://debezium.io/blog/2019/09/05/website-documentation-overhaul/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 网站和文档大修 2019 年 9 月 5 日 作者&#xff1a; 克里斯克兰福…

网络安全|GitHub 已成为恶意软件传播的严重污染源

Recorded Future 凸显了全球合法平台威胁的上升。 根据 Recorded Future最近 的一份报告&#xff0c;开发者平台GitHub最近已成为黑客用来托管和传播恶意软件的流行工具。 该平台为攻击者提供了将其行为伪装成合法网络流量的能力&#xff0c;这使得跟踪和确定攻击者的身份变得…

ubuntu20.04 deepstream 6.3安装

1.基础环境gstreamer sudo apt install \ libssl-dev \ libgstreamer1.0-0 \ gstreamer1.0-tools \ gstreamer1.0-plugins-good \ gstreamer1.0-plugins-bad \ gstreamer1.0-plugins-ugly \ gstreamer1.0-libav \ libgstreamer-plugins-base1.0-dev \ libgstrtspserver-1.0-0 …

C练习——模拟投掷6000次骰子

题目&#xff1a; 模拟骰子投6000次&#xff0c;并计算每一面出现的概率 解析&#xff1a; 6000次&#xff0c;首先想到用数组记录六个面各出现次数 其次&#xff0c;使用随机数&#xff08;1~6的数&#xff09;模拟骰子 然后统计1~6每个数出现的几次&#xff0c;最后除以6…

CentOS命令大全:从入门到精通

博客前言 欢迎来到《CentOS命令大全&#xff1a;从入门到精通》的博客&#xff01;在本文中&#xff0c;我们将深入探讨CentOS操作系统中的各种命令&#xff0c;帮助您从初学者成长为精通者。 CentOS作为一款稳定、高效的Linux发行版&#xff0c;广泛应用于服务器和云计算环境…

倒F天线设计经验分享

一、IFA天线理论分析 为了改善&#xff29;&#xff2c;&#xff21;天线难以使用的缺点&#xff0c;在&#xff29;&#xff2c;&#xff21;天线的基础上再增加一个倒L结构&#xff0c;形成IFA天线&#xff0c;此种天线体积小、易于匹配并具有双极化的特点&#xff0c;而在蓝…

基于springboot的二手车交易系统的设计与实现

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一 、设计说明 1.1 课题背景 二…

15.kubernetes部署Longhorn

Longhorn 简介 Longhorn是一个轻量级且功能强大的云原生Kubernetes分布式存储平台,可以在任意基础设施上运行。Longhorn与Rancher结合使用,将帮助您在Kubernetes环境中轻松、快速和可靠地部署高可用性持久化块存储。 Longhorn解决了Kubernetes存储的复杂性问题,它是一个可…

Python八股文总结

一. Python基本数据结构有哪四种&#xff1f;区别是什么&#xff1f; 列表&#xff08;List&#xff09;元组&#xff08;Tuple&#xff09;字典&#xff08;Dictionary&#xff09;集合&#xff08;Set&#xff09; 区别主要在于它们的可变性&#xff08;是否可以修改&#x…

交换机批量巡检、配置软件

使用Python3.8实现&#xff0c;支持huawei\h3c\cisco三种交换机批量巡检或者批量配置。 要求&#xff1a;同一种类型的交换机有相同的登录账号和密码&#xff0c;开启ssh服务。 可以查看mac地址是否漂移或者欺骗、ip地址与MAC对应关系&#xff0c;可以查看是否有环路&#xf…

AI 图像自动补全 Uncrop 工具介绍

ClipDrop Uncrop是一款基于AI的图像自动补全工具&#xff0c;由StabilityAI旗下的Clipdrop开发。通过利用StableDiffusionXL开发的算法和深度学习技术&#xff0c;Uncrop可以对用户上传的图片进行自动扩展和补全&#xff0c;改变图片尺寸&#xff0c;使得图像内容得到更完整的呈…

组件v-model

最近看到vue版本更新到3.4.x了&#xff0c;其中有个defineModel API&#xff0c;defineModel在3.3的时候是作为实验特性发布的&#xff0c;在3.4中逐渐稳定。这个API就是Vue3简化组件v-model的写法的&#xff0c;所以这篇就一块儿来总结一下vue中的组件v-model 官网的示例 先说…

互联网上门洗衣洗鞋工厂系统搭建;

随着移动互联网的普及&#xff0c;人们越来越依赖手机应用程序来解决生活中的各种问题。通过手机预约服务、购买商品、获取信息已经成为一种生活习惯。因此&#xff0c;开发一款上门洗鞋小程序&#xff0c;可以满足消费者对于方便、快捷、专业的洗鞋服务的需求&#xff0c;同时…

Vue-组件缓存-keep-alive

1. 介绍 在Vue.js中&#xff0c;组件的复用和缓存是一个重要的优化手段。当我们频繁切换组件时&#xff0c;频繁的销毁和重建会带来一定的性能开销。为了解决这个问题&#xff0c;Vue提供了一个名为keep-alive的抽象组件。下面我们将深入探讨keep-alive的工作原理、使用场景和…

Python学习之路-异常

Python学习之路-异常 简介 程序在运行时&#xff0c;如果 Python 解释器 遇到到一个错误&#xff0c;会停止程序的执行&#xff0c;并且提示一些错误信息&#xff0c;这就是异常。程序停止执行并且提示错误信息这个动作&#xff0c;我们通常称之为&#xff1a;抛出(raise)异常…

MYSQL第三次作业--单表查询

第三次作业 一、创建worker表 mysql> create table worker(-> 部门号 int(11) not null,-> 职工号 int(11) not null,-> 工作时间 date not null,-> 工资 float(8,2) not null,-> 政治面貌 varchar(10) not null default群众,-> 姓名 varchar(20) not n…

华为OD机试真题-开源项目热榜--Java-OD统一考试(C卷)

题目描述: 某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。对于每个开源项目,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue、MR的数量,开源项目的热…