新手向-Java调用C接口

news2024/9/29 16:28:36

最近工作上需要用java调用C接口,在这里记录一下。

非专业人员,有不同意见欢迎评论区交流。


java调用c接口一般有两种方案,JNI和JNA,JNI性能更好,使用复杂,JNA性能一般,使用简单,这里是简单用一下,所以用了JNA。

在github上找了个maven的demo,调不通,最后没有用maven。

目录结构

MyProject/
├── libs/
│   ├── jna.jar
│   └── platform.jar
├── CaptureUtil.java
└── libkysdk-screenshot.so

下载JNA

先建一个目录libs,下载jna需要的两个jar包,下载地址

准备so库

在这里我要调用api在libkysdk-screenshot.so,所以把so库放在项目路径下。

(也可以不放,记住位置)

调用代码

import com.sun.jna.Library;
import com.sun.jna.Native;

import java.io.File;

public class CaptureUtil {

    public interface Capture extends Library {
        // 要调用的api的java定义
        int kdk_capture_screen_to_file(String filepath, String filename, String display);

        // 加载动态链接库
        Capture INSTANCE = (Capture) Native.loadLibrary("kysdk-screenshot", Capture.class);
    }

    // 静态块用于加载本地库
    static {
        // 设置JNA查找库的方式,这里可以指定库的位置或者使用默认路径
        String libraryPath = "/home/XXX/libkysdk-screenshot.so";
        File file = new File(libraryPath);
        if (!file.exists()) {
            throw new RuntimeException("Library not found: " + libraryPath);
        }
        System.load(file.getAbsolutePath());
    }

    public static void main(String[] args) {
        // 获取环境变量
        String home = System.getenv("HOME");
        // 显示器参数应该是字符串而不是字符指针
        String display = ":0";
        System.out.println("***************************");
        // 调用库函数,并且打印返回值
        int result = Capture.INSTANCE.kdk_capture_screen_to_file(home, "test.png", display);
        System.out.println(result);
        System.out.println("***************************");
    }
}

编译语句: 

javac -cp libs/jna-5.15.0.jar:libs/jna-platform-5.15.0.jar CaptureUtil.java

执行语句:

java -cp .:libs/jna-5.15.0.jar:libs/jna-platform-5.15.0.jar CaptureUtil

这样就完成了调用。

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

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

相关文章

DnsDiag:一款针对DNS的故障排除和安全审计工具

关于DnsDiag DnsDiag是一款针对DNS的故障排除和安全审计工具,在该工具的帮助下,广大研究人员可以轻松检测DNS基础设施的安全性。 你是否曾怀疑过你的 ISP 是否劫持了你的 DNS 流量?你是否曾观察到 DNS 响应有任何异常行为?你是否…

计算机系统的组成

第二章:计算机系统组成 一、信息表示及存储 数据是反映客观事物属性的记录,是信息的具体表现形式。数据经过加工处理之后,就 成为信息;而信息需要经过数字化转变成数据才能存储和传输。 数据信息分为数值型和非数值型。 计算机能…

4.3章节python中循环结构:两种类型:for 循环和 while 循环用法

Python 中的循环结构主要有两种类型:for 循环和 while 循环。每种循环都有其特定的使用场景,允许你根据需要重复执行代码块。 一、遍历循环for语句 for 循环用于遍历任何序列(如列表、元组或字符串)或其他可迭代对象 (1)for 循环…

【Mysql】数据库基本操作-----DML

1、基本操作 DML是数据操作语言,英文全称是:Data Manipulation Language,用来对数据库中的数据记录进行更新。 关键字: (1)插入insert (2)删除delete (3)更新upda…

element的描述列表<el-descriptions>添加字典翻译功能

标题1 可以利用对象赋值进行翻译功能: HTML代码: <el-descriptions border :column"2" direction"vertical"><el-descriptions-item label"单位类别">{{companyTypeFormat(viewForm.companyType?viewForm.companyType:)}}</el-…

【AI变现】探索AI领域的财富密码:5大AI变现路径解析

随着现代科技的高速发展&#xff0c;AI已经不只是一个概念工具&#xff0c;它正在深刻地改变着我们的生活方式、工作模式和商业模式。 在这个AI无处不在的时代&#xff0c;如何抓住机遇&#xff0c;利用AI技术创造财富&#xff0c;成为了许多人关注的焦点。 接下来&#xff0…

2.5 有限冲激响应(FIR)滤波器

2.5 有限冲激响应&#xff08;FIR&#xff09;滤波器 2.5 有限冲激响应&#xff08;FIR&#xff09;滤波器 在此阶段&#xff0c;我们知道&#xff0c;大多数实际感兴趣的信号可以看作是不同频率下振荡的复数正弦波的总和。这些正弦波的幅度和相位决定了该信号的频率内容&…

苏州 工业三维动画制作「世岩清上」一站式可视化营销服务商

在现代工业设计和营销中&#xff0c;三维动画已成为一种重要的视觉传达工具。它不仅能够直观展示产品的外观和功能&#xff0c;还能通过动态演示来增强观众的理解和体验。本文将深入探讨工业三维动画制作的关键点&#xff0c;包括产品动画和场景动作的制作技巧。 产品动画制作…

数据结构实验二之栈和队列(上)——环形队列和链队

实验题3:实现环形队列的各种基本运算的算法 题目描述 编写一个程序sqqueue.cpp,实现环形队列(假设栈中的元素类型ElemTye为char)的各种基本运算,并在此基础上设计一个程序exp3-3.cpp完成以下功能。 (1)初始化队列q。 (2)判断队列q是否非空。 (3)依次进队元素a、b、c。 (4)出队…

【工具变量】无废城市试点DID数据集(2000-2023)

数据简介&#xff1a;2018年&#xff0c;国务院办公厅发布了《“无废城市”建设试点工作方案》&#xff0c;明确了“无废城市”的概念&#xff0c;强调通过创新、协调、绿色、开放的理念&#xff0c;推动城市固体废物管理的综合改革&#xff0c;力求实现固体废物产生量最小、资…

AI新方向:OpenAI o1是一个更擅长思考的模型系列:高级推理+逻辑严密+更广泛的知识,用于解决复杂的逻辑问题,慢思考

之前推出AI store感觉偏应用&#xff0c;也千篇一律&#xff0c;是AI的一个方向&#xff1a;广度。 现在推出o1 更严密的逻辑&#xff0c;也是AI的一个方向&#xff1a;深度。花更多时间&#xff0c;推理复杂的任务并解决比以前的科学、编码和数学模型更难的问题。确保AI的使用…

大模型训练技术:使用QLM提升Qwen2-7B 128k训练效率3.4倍

大模型训练技术&#xff1a;使用QLM提升Qwen2-7B 128k训练效率3.4倍 原创 一、引言 自Transformer架构问世以来&#xff0c;大模型领域的进展如火如荼&#xff0c;短短几年内&#xff0c;模型参数规模已攀升至天文数字&#xff0c;轻松跨过万亿门槛。面对如此庞然大物&#…

Comfyui 学习笔记3

ipadapter 用noise 增强画质 ipadapter 对每张图片的精准控制 对于一个 不是正方形的图形 作为ipadapter 可能丢弃下半身的风格&#xff0c;需要用ipadapter tile进行ipadapter 全身mask ipadapter advance weight_type 构图和风格迁移 构图迁移&#xff1a;左边什么 右面…

千万不要运行!几个可以整蛊你朋友的Python程序!

Python 能做很多无聊&#xff0c;但有意思的事情&#xff0c;例如接下来的一些案例。以下程序&#xff0c;不要发代码&#xff0c;要不实现不了你整蛊的目的。 要打包成一个 exe 程序&#xff0c;发给朋友才有意思&#xff0c;使用 pip install pyinstaller。 打包命令如下&a…

o1规划能力首测!已超越语言模型范畴,preview终于赢mini一回

克小西 发自 凹非寺 量子位 | 公众号 QbitAI o1-preview终于赢过了mini一次&#xff01; 亚利桑那州立大学的最新研究表明&#xff0c;o1-preview在规划任务上&#xff0c;表现显著优于o1-mini。 相比于传统模型的优势更是碾压级别&#xff0c;在超难任务上的准确率比Llama3.…

360° 镜头检测铝件内壁划痕与杂质:保障铝件内孔制造质量的精准方案

在铝件内孔制造的过程中&#xff0c;内壁的质量把控是至关重要的环节。制造过程中产生的碎屑残留以及划痕等问题&#xff0c;不仅会影响铝件的外观&#xff0c;更可能对其性能和使用寿命造成严重的损害。为了精准检测这些问题&#xff0c;我们提出了一套基于 360 镜头的检测方案…

金融科技革命:API接口开放平台,畅通金融服务之路

金融科技是近年来蓬勃发展的领域&#xff0c;它利用先进的技术手段来改善和创新金融服务。在金融科技的革命中&#xff0c;API接口开放平台扮演着重要的角色&#xff0c;它通过提供统一的接口服务&#xff0c;让金融机构和其他行业能够更方便地进行数据交换和合作。本文将以挖数…

高防服务器有用吗?租用价格一般多少

高防服务器有用吗&#xff1f;有用。高防服务器是一种具备高度防御能力的服务器&#xff0c;主要用于应对DDoS攻击、CC攻击等网络威胁。它通过专业的硬件设备和先进的防御算法&#xff0c;为用户提供持续、稳定的网络安全防护。高防服务器的主要特点包括强大的防御能力、低延迟…

跑步机的心声——N8900蓝牙音频芯片赋予智能健身新维度

国内健身器材市场年销售中跑步机占比超过一半&#xff0c;显示出其在健身器材领域的重要地位。国家卫生部门的公开讲话中提到&#xff0c;健康产业对国民经济的贡献具有无限前景&#xff0c;并强调了政府对健康产业的积极引导和支持。预计健康产业的产值将达到2万亿元以上&…

数据库操作:数据类型

1、数值类型 注&#xff1a;此图的最大值都要减1&#xff1b;因为我的错误&#xff0c;后面会改正&#xff1b; 1.0、tinyint 类型大小——1字节 create table tt1(num tinyint); insert into tt1 values(1); insert into tt1 values(128); -- 越界插入&#xff0c;报错 E…