JNA调用c++动态库返回数据

jna学习网站

JNA Examples 

1、返回String,  pch.h头文件

// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。#ifndef PCH_H
#define PCH_H// 添加要在此处预编译的标头
#include "framework.h"#ifdef __cplusplus
#define EXPORT extern "C" __declspec(dllexport)
#else 
#define EXPORT __declspec(dllexport)
#endifstruct  VideoAiReq {//行人告警频率int intervalP;//停车告警频率int intervalC;//应急车道告警频率int intervalR;//视频流地址char* videoUrl;//结果请求地址char* resultUrl;//无人机idchar* deviceId;//控制文件绝对路径  有则算法开始输出char* startFile;
};EXPORT char* startVideoAi(VideoAiReq videoAiReq);#endif //PCH_H

pch.cpp代码

// pch.cpp: 与预编译标头对应的源文件#include "pch.h"
#include "iostream"char* startVideoAi(VideoAiReq videoAiReq) {std::cout << videoAiReq.deviceId << std::endl;std::cout << videoAiReq.startFile << std::endl;std::cout << videoAiReq.intervalP << std::endl;std::cout << videoAiReq.videoUrl << std::endl;std::cout << videoAiReq.resultUrl << std::endl;std::cout << videoAiReq.intervalC << std::endl;std::cout << videoAiReq.intervalR << std::endl;return videoAiReq.startFile;
}// 当使用预编译的头时,需要使用此源文件,编译才能成功。

编译成动态库 videoai1

java代码如下

VideoAiLibrary.java 动态库
package com.pojo.util;import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;import java.nio.ByteBuffer;/*** JNA Wrapper for library <b>mycpp3</b><br>* This file was autogenerated by <a href="http://jnaerator.googlecode.com/">JNAerator</a>,<br>* a tool written by <a href="http://ochafik.com/">Olivier Chafik</a> that <a href="http://code.google.com/p/jnaerator/wiki/CreditsAndLicense">uses a few opensource projects.</a>.<br>* For help, please visit <a href="http://nativelibs4java.googlecode.com/">NativeLibs4Java</a> , <a href="http://rococoa.dev.java.net/">Rococoa</a>, or <a href="http://jna.dev.java.net/">JNA</a>.*/
public interface VideoAiLibrary extends Library {public static final String JNA_LIBRARY_NAME = "videoai1";public static final VideoAiLibrary INSTANCE = (VideoAiLibrary) Native.load(VideoAiLibrary.JNA_LIBRARY_NAME, VideoAiLibrary.class);/*** Original signature : <code>void startVideoAi(char*, char*, char*, char*, int)</code><br>* <i>native declaration : C:\Users\Administrator\mycpp3.h:6</i>*/String startVideoAi(VideoAiReq videoAiReq);
}

传参实体类

package com.pojo.util;import com.sun.jna.Structure;/*** 属性顺序和c++代码一致*/
@Structure.FieldOrder({"intervalP", "intervalC", "intervalR", "videoUrl", "resultUrl", "deviceId", "startFile"})
public class VideoAiReq extends Structure {/*** 行人告警频率*/public int intervalP;/*** 停车告警频率*/public int intervalC;/*** 应急车道告警频率*/public int intervalR;/*** 视频流地址*/public String videoUrl;/*** 结果请求地址*/public String resultUrl;/*** 无人机id*/public String deviceId;/*** 控制文件绝对路径  有则算法开始输出*/public String startFile;public int getIntervalP() {return intervalP;}public void setIntervalP(int intervalP) {this.intervalP = intervalP;}public int getIntervalC() {return intervalC;}public void setIntervalC(int intervalC) {this.intervalC = intervalC;}public int getIntervalR() {return intervalR;}public void setIntervalR(int intervalR) {this.intervalR = intervalR;}public String getVideoUrl() {return videoUrl;}public void setVideoUrl(String videoUrl) {this.videoUrl = videoUrl;}public String getResultUrl() {return resultUrl;}public void setResultUrl(String resultUrl) {this.resultUrl = resultUrl;}public String getDeviceId() {return deviceId;}public void setDeviceId(String deviceId) {this.deviceId = deviceId;}public String getStartFile() {return startFile;}public void setStartFile(String startFile) {this.startFile = startFile;}public VideoAiReq() {}}

测试类 和测试结果

package com.pojo.util;import lombok.SneakyThrows;import java.io.File;
import java.nio.ByteBuffer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class JnaTest {@SneakyThrowspublic static void main(String[] args) {VideoAiReq videoAiReq = new VideoAiReq();videoAiReq.setIntervalP(10);videoAiReq.setIntervalC(20);videoAiReq.setIntervalR(30);videoAiReq.setVideoUrl("videoUrl");videoAiReq.setStartFile("startFile");videoAiReq.setDeviceId("deviceId");videoAiReq.setResultUrl("resultUrl");String ss = VideoAiLibrary.INSTANCE.startVideoAi(videoAiReq);System.out.println("return===" + ss);
//        Path newFile = Paths.get("D:\\home\\smart\\newfile.txt");
//        if (!Files.exists(newFile)) {
//            Files.createFile(newFile);
//        }
//        Files.deleteIfExists(newFile);}
}

 

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

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

相关文章

Spring 中的 @AUtowire 和 @Resource 用法和原理,以及避坑

&#x1f31f; Why&#xff1a;了解 Autowire 和 Resource 的高级用法和原理对于开发大型企业级应用至关重要。这些注解不仅帮助我们实现组件之间的松耦合&#xff0c;还能提高代码的可维护性和可测试性。掌握它们的高级用法可以让我们更灵活地处理复杂的依赖关系。 &#x1f…

docker harbor

文章目录 一&#xff0c;搭建私有仓库1.1下载registry1.2在 daemon.json 中添加私有镜像仓库地址1.3重新加载重启docker1.4运行容器1.5拉取一个centos7镜像1.6给镜像加标签1.7上传镜像1.8显示私有仓库的所有镜像1.8查看私有仓库的 centos 镜像有哪些tag 二&#xff0c;什么是ho…

SVN——常见问题

基本操作 检出 提交 更新 显示日志 撤销本地修改 撤销已提交内容 恢复到指定版本 添加忽略 修改同一行 修改二进制文件

个人博客搭建 | Hexo框架

文章目录 1.Hexo安装2.创建博客3.将博客通过GitHub来部署4.更换主题 1.Hexo安装 Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他标记语言&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。搭建Hexo首先要…

项目启动过程中,项目加载并初始化bean时报空指针

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name sysDictTypeServiceImpl: Invocation of init method failed; nested exception is java.lang.NullPointerException 其实对于调试开发项目中的bug很简单,我们要一针见血…

Flink作业骨架结构

前言 Flink 是大数据流计算引擎&#xff0c;开发者通过程序语言开发一个 Flink 作业&#xff0c;然后提交这个作业到服务端并执行&#xff0c;以完成对大数据流的处理。 Flink 作业有一个基本骨架&#xff0c;再复杂的 Flink 作业都离不开这个基本骨架&#xff0c;了解作业的…

spring boot itext7 修改生成文档的作者、制作者、标题,并且读取相关的信息。

1、官方的example文件&#xff1a;iText GitHub itext-java-7.2.5\kernel\src\test\java\com\itextpdf\kernel\pdf\PdfStampingTest.java 2、修改代码&#xff1a; Testpublic void stamping1() throws IOException {String filename1 destinationFolder "stamping1_…

期货考核系统部署/配资net源码

关于期货考核系统部署与配资NET源码的问题&#xff0c;以下是一些相关的信息和建议&#xff1a; 一、期货考核系统部署 期货考核系统的部署是一个复杂的过程&#xff0c;涉及需求分析、系统设计、开发、测试、部署等多个环节。以下是一些关键步骤&#xff1a; 需求分析&…

机器学习——主要分类

前言&#xff1a; 机器学习是人工智能的重要分支之一&#xff0c;它通过分析数据来构建模型&#xff0c;并通过这些模型进行预测、分类或决策。随着数据量的迅速增长&#xff0c;机器学习在多个领域展现出巨大的应用潜力&#xff0c;推动了科技的进步。根据学习方式和数据的使用…

Shell实现查看用户密码有效期

基于 Shell 脚本&#xff0c;实现显示 Linux 用户的密码修改时间、到期时间、到期天数和密码有效期等信息。 Shell 脚本&#xff1a; #!/bin/bash# 获取用户名 read -p "请输入要查询的用户名: " username# 检查用户是否存在 if id "$username" &>…

马化腾:“腾讯只剩半条命,另外半条交给合作伙伴”;服务号消息折叠折腾死生态伙伴另外半条命

马化腾曾坦言&#xff1a;“腾讯只剩半条命&#xff0c;另外半条交给合作伙伴。”这句话道出了腾讯赖以为生的生态布局&#xff0c;腾讯的成功不仅依靠自身强大的平台&#xff0c;还依赖着生态系统中的合作伙伴。而今&#xff0c;微信服务号“消息折叠”的推出&#xff0c;正是…

如何替换OCP节点(二):使用 antman脚本 | OceanBase应用实践

前言&#xff1a; OceanBase Cloud Platform&#xff08;简称OCP&#xff09;&#xff0c;是 OceanBase数据库的专属企业级数据库管理平台。 在实际生产环境中&#xff0c;OCP的安装通常是第一步&#xff0c;先搭建OCP平台&#xff0c;进而依赖OCP来创建、管理和监控我们的生…

前端_003_js扫盲

文章目录 var,let,const严格模式数据类型运算符事件常用对象函数绑定call() ,apply(),bind() 闭包浏览器中事件循环回调和异步Promiseasync和await DOMBOMAjax var,let,const let是var的升级版本&#xff0c;对于块作用域&#xff0c;var无法进行限制&#xff0c;let不会存在该…

营销邮件软件:提升邮件营销效率必备工具!

营销邮件软件选择技巧&#xff1f;免费高效的邮件营销软件推荐&#xff1f; 如何高效地管理和优化邮件营销活动成为了企业面临的一大挑战。营销邮件软件成为提升邮件营销效率的必备工具。MailBing将深入探讨营销邮件软件的功能、优势以及如何选择合适的工具。 营销邮件软件&a…

【深度学习】transformer为什么使用多头注意力极致?为什么不使用一个头

在现代深度学习中,Transformer 模型的多头注意力机制已被广泛应用,特别是在自然语言处理领域。最近我读到一篇有趣的博客文章,详细介绍了为什么 Transformer 采用多头注意力,而不是简单的单头注意力。文章从理论推导到代码实现,对多头注意力机制进行了深入分析。下面我为大…

前端新手教程:HTML、CSS 和 JavaScript 全面详解及实用案例

一、引言 在当今数字化的时代&#xff0c;前端开发扮演着至关重要的角色&#xff0c;它决定了用户与网页和应用程序交互的体验。HTML、CSS 和 JavaScript 作为前端开发的核心技术&#xff0c;分别负责网页的结构、样式和交互。本教程将为前端新手全面深入地介绍 HTML、CSS 和 …

element checkbox选框和文字分开点击---更改一列checkbox的顺序(进阶版)

选框和文字分开点击&#xff0c;找了很多&#xff0c;没有我想要的效果&#xff0c;但也借鉴了一下&#xff0c;实现了&#xff0c;记录一下 样式看起来倒是没多大区别&#xff0c;需求&#xff1a; 勾选了选框才可以点击文字 &#xff0c;一次只能点击一条数据&#xff0c;点…

【分布式微服务云原生】《微服务架构大揭秘:关键组件全览与实战指南》

标题&#xff1a;《微服务架构大揭秘&#xff1a;关键组件全览与实战指南》 摘要&#xff1a;本文深入详解微服务架构及其关键组件&#xff0c;包括服务网关、配置中心、熔断器、负载均衡、限流降级和服务注册与发现的核心功能特点、技术选型以及注意事项。读者将全面了解微服…

中阳金融市场中的风险管理与投资优化策略

在全球经济波动性不断加剧的背景下&#xff0c;金融市场的复杂性与不确定性显著增加。作为国际金融市场中的重要组成部分&#xff0c;中阳金融市场吸引了大量投资者的关注。面对风险与机遇并存的市场环境&#xff0c;如何合理制定风险管理与投资优化策略&#xff0c;成为投资者…

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey阅读笔记

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey 综述阅读笔记 仅记录个人比较感兴趣的部分 基本知识 PEFT的三种分类&#xff1a;additive, selective, reparameterized, and hybrid fine-tuning selective fine-tuning 不需要任何额外的参数&am…