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,一经查实,立即删除!

相关文章

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首先要…

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; 需求分析&…

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

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

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

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

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

选框和文字分开点击&#xff0c;找了很多&#xff0c;没有我想要的效果&#xff0c;但也借鉴了一下&#xff0c;实现了&#xff0c;记录一下 样式看起来倒是没多大区别&#xff0c;需求&#xff1a; 勾选了选框才可以点击文字 &#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…

Axure横向菜单高级交互

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;横向菜单高级交互 主要内容&#xff1a;横向菜单左右拖动、选中效果 应用场景&#xff1a;app横向菜单、pc后台动态区域 案例展示&#xff1a; 演…

SpringBoot技术的车辆管理流程自动化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

uniapp-实现天地图以及行政区划图层覆盖

前言&#xff1a; 在uniapp中&#xff0c;难免会遇到使用地图展示的功能&#xff0c;但是百度谷歌这些收费的显然对于大部分开源节流的开发者是不愿意接受的&#xff0c;所以天地图则是最佳选择。 此篇文章&#xff0c;详细的实现地图展示功能&#xff0c;并且可以自定义容器宽…

探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱

文章目录 探索 Jupyter 笔记本转换的无限可能&#xff1a;nbconvert 库的神秘面纱背景&#xff1a;为何选择 nbconvert&#xff1f;库简介&#xff1a;nbconvert 是什么&#xff1f;安装指南&#xff1a;如何安装 nbconvert&#xff1f;函数用法&#xff1a;简单函数示例应用场…

安装vue发生异常:npm ERR! the command again as root/Administrator.

一、异常 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If you believe this might b…

安卓开发中轮播图和其指示器的设置

在安卓开发中&#xff0c;轮播图&#xff08;Carousel&#xff09;是一种常见的UI组件&#xff0c;用于展示一系列图片或内容&#xff0c;用户可以左右滑动来切换不同的视图。轮播图通常用于展示广告、新闻、产品图片等。 轮播图的指示器&#xff08;Indicator&#xff09;则是…

大模型生图安全疫苗注入赛题解析(DataWhale组队学习)

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月实践赛的大模型生图安全疫苗注入赛道&#xff1b;本文主要整理本次赛事的基本流程和优化方法。&#x1f495;&#x1f495;&#x1f60a; 一…

IEC104规约的秘密之九----链路层和应用层

104规约从TCP往上&#xff0c;分成链路层和应用层。 如图&#xff0c;APCI就是链路层&#xff0c;ASDU的就是应用层 我们看到报文都是68打头的&#xff0c;因为应用层报文也要交给链路层发送&#xff0c;链路层增加了开头的6个字节再进行发送。 完全用于链路层的报文每帧都只有…

好用,易用,高效,稳定 基于opencv 的 图像模板匹配 - python 实现

在定位、搜索固定界面图块时&#xff0c;经常用到模板匹配&#xff0c;opencv自带的图像模板匹配好用&#xff0c;易用&#xff0c;高效&#xff0c;稳定&#xff0c;且有多种匹配计算方式。 具体示例如下&#xff1a; 模板图&#xff1a; 待搜索图&#xff1a; 具体实现代码…

FreeRTOS - 任务管理

在学习FreeRTOS过程中&#xff0c;结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源&#xff0c;整理了该篇文章。如有内容理解不正确之处&#xff0c;欢迎大家指出&#xff0c;共同进步。 参考&#xff1a;https://rtos.100ask.net/zh/…

SpringColoud GateWay 核心组件

优质博文&#xff1a;IT-BLOG-CN 【1】Route路由&#xff1a; Gateway的基本构建模块&#xff0c;它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真&#xff0c;则匹配到该路由。 Route路由-动态路由实现原理&#xff1a; 配置变化Apollo 服务地址实例变化…