【JNA与C++基本使用示例】

JNA中java与C++使用注意事项和代码示例

    • JNA关系映射表
    • 使用案列
      • 注意
        • 代码示例
          • C++代码
          • java代码

JNA关系映射表

在这里插入图片描述

使用案列

注意

  1. JNA只支持C方式的dll
  2. 使用C++的char* 作为返回值时,需要返回的变量为malloc分配的地址
  3. C++的strlen函数只获得除/0以外的字符串长度
代码示例
C++代码
// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 TESTJNA_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// TESTJNA_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef TESTJNA_EXPORTS
#define TESTJNA_API __declspec(dllexport)
#else
#define TESTJNA_API __declspec(dllimport)
#endif
#include<vector>
#include<string>
#include<nlohmann/json.hpp>using json = nlohmann::json;//头文件extern "C" TESTJNA_API const char* testJNAPlusJson(int arr[], const char* arr2);//cpp
const char* testJNAPlusJson(int arr[], const char* arr2)
{json j = json::parse(arr2);std::vector<std::vector<int>> resVector =       j.get<std::vector<std::vector<int>>>();//序列化为字符串json ressd(resVector);std::string dasd = ressd.dump();auto suibian = dasd.length()+1;//实际的字符串长度const char* hhh = dasd.c_str();//c字符串char* resfinal = (char*)malloc(suibian);// char* 返回值分配的strcpy_s(resfinal, suibian,hhh);free(resfinal );return resfinal;
}
java代码
 public class JNATestPlus {  public interface CTest extends Library {  CTest INSTANCE = (CTest)  Native.load("TESTJNA.dll",CTest.class);  String testJNAPlusJson(int[] arr, String arr2);  }     static {  URL resource = JNATestPlus.class.getClassLoader().getResource("./libs/TESTJNA.dll");  String path = resource.getPath();  System.load(path);  }     public static void main(String[] args) {        int[] arr = {1,2};  int[][] arr2 ={{1,2},{1,2}};  String s2 = JSON.toJSONString(arr2);  String s1 = CTest.INSTANCE.testJNAPlusJson(arr, s2);  System.out.println(s1);  }  
}

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

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

相关文章

基于PaddleNLP的深度学习对文本自动添加标点符号(一)

前言 目前以深度学习对文本自动添加标点符号研究很少&#xff0c;已知的开源项目并不多&#xff0c;详细的介绍就更少了&#xff0c;但对文本自动添加标点符号又在古文识别语音识别上有重大应用。 基于此&#xff0c;本文开始讲解基于PaddleNLP的深度学习对文本自动添加标点符号…

WT2003H4-16S语音芯片:扭蛋机新潮音乐,娱乐升级无限

在扭蛋机的乐趣世界里&#xff0c;唯创知音的WT2003H4-16S语音芯片&#xff0c;作为MP3音乐解码播放IC&#xff0c;为扭蛋机带来了更智能、更富有趣味的音乐体验&#xff0c;为玩家打开了娱乐升级的无限可能。 1. 机启音乐&#xff0c;欢迎扭蛋之旅 扭蛋机启动时&#xff0c;…

鸿蒙开发之状态管理@Prop和@Link

一、用法 在父子组件需要进行数据同步的时候&#xff0c;可以通过Prop和Link装饰器来做到。在父组件中用State装饰&#xff0c;在自组件中用Prop或Link装饰。 结论&#xff1a;Prop用于子组件只监听父组件的数据改变而改变&#xff0c;自己不对数据改变 Link用于子组件与父组…

Proxmox VE 安装 OpenWrt 配置旁路由教程

话不多说&#xff0c;本篇文章将记录如何在 Proxmox VE 环境通过虚拟机安装 OpenWrt 配置旁路由的过程&#xff0c;仅做参考。 PVE 创建虚拟机 名称随意&#xff0c;GuestOS 选择 Linux&#xff0c;不使用任何 iso 镜像。&#xff08;记住你的 VMID&#xff09; 清空将要创建…

【Linux】CentOS部分命令

目录 1.文件处理命令2.文件查看命令3.目录查看命令 1.文件处理命令 &#xff08;1&#xff09;.创建文件 mkdir //创建文件夹 touch //创建文件 echo > filename //创建一个空文件 ↑↓ echo "" > filename …

机器学习---Adaboost算法

1. Adaboost算法介绍 Adaboost是一种迭代算法&#xff0c;其核心思想是针对同一个训练集训练不同的分类器&#xff08;弱分类器&#xff09;&#xff0c;然 后把这些弱分类器集合起来&#xff0c;构成一个更强的最终分类器&#xff08;强分类器&#xff09;。Adaboost算法本身…

C语言的第一个HelloWorld程序

相信进入编程世界的人&#xff0c;都知道入门的第一个程序是"Hello, World!"&#xff0c;那就怀念一下过去&#xff0c;给想入门你一点启发。 第一个C程序通常是打印"Hello, World!"&#xff0c;用于演示C语言的基本语法和结构。 #include <stdio.h&g…

Qt 线程

&#x1f4a1; 进度条显示拷贝进度&#xff08;verson 1&#xff09; 窗口上放置一个按钮和一个进度条部件&#xff0c;点击按钮&#xff0c;进行拷贝操作 —— 打开对话框选择源文件&#xff0c;然后再打开一个对话框 选择 目标文件存放位置和名称。拷贝过程中进度条显示当前…

十三、YARN资源分配调用

1、为什么要先学习YARN组件&#xff1f; 在Hadoop文件系统中&#xff0c;YARN作为Hadoop系统的第三大组件&#xff0c;其中&#xff0c;第二大组件MapReduce组件是基于YARN运行的&#xff0c;即没有YARN无法运行MapReduce程序&#xff0c;所以需要同时学习YARN。 2、YARN &…

使用elasticsearch-dump工具备份ES数据库

ES数据库版本 elasticsearch7.16.0 备份工具 elasticsearch-dump &#xff08;docker 版&#xff09; 如果需要设置定时任务&#xff0c;需要使用使用elasticsearch-dump编译的二进制文件&#xff0c;需要nodejs、npm环境。 Docker 安装 docker pull elasticdump/elastics…

Day58力扣打卡

打卡记录 下一个更大元素 IV&#xff08;单调栈 x2&#xff09; 链接 class Solution:def secondGreaterElement(self, nums: List[int]) -> List[int]:ans [-1] * len(nums)s []t []for i, x in enumerate(nums):while t and nums[t[-1]] < x:ans[t.pop()] x # t…

Fabric建链docker-compose方式(客户端与节点主机分离+Fabric CA server容器化)

目录 一、客户端准备1.1、准备链目录和配置文件1.2、设置环境变量1.3、启动fabric-ca-server1.4、登记ca的admin用户 二、准备组织org12.1、准备组织目录2.2、生成组织org1的msp配置 三、准备peer0节点3.1、注册peer03.2、注册peer组织org1的user3.3、注册peer组织org1的admin3…

『npm』一条命令快速配置npm淘宝国内镜像

&#x1f4e3;读完这篇文章里你能收获到 一条命令快速切换至淘宝镜像恢复官方镜像 文章目录 一、设置淘宝镜像源二、恢复官方镜像源三、查看当前使用的镜像 一、设置淘宝镜像源 npm config set registry https://registry.npm.taobao.org服务器建议全局设置 sudo npm config…

Visuial Studio 打开 Unity 脚本时,脚本继承MonoBehaviour暂时失效为白色的解决方法

问题描述&#xff1a; u3d2020.3.47f1c1 vs2019 之前C#脚本A好好的&#xff0c;今天改了一行代码&#xff0c;在储存&#xff0c;就出现这个问题了&#xff0c;变白之后&#xff0c;新增的一行代码不生效&#xff0c;之前的代码照常运行。 如下办法都不能解决我的问题&…

科技提升安全,基于YOLOv6开发构建商超扶梯场景下行人安全行为姿态检测识别系统

在商超等人流量较为密集的场景下经常会报道出现一些行人在扶梯上摔倒、受伤等问题&#xff0c;随着AI技术的快速发展与不断普及&#xff0c;越来越多的商超、地铁等场景开始加装专用的安全检测预警系统&#xff0c;核心工作原理即使AI模型与摄像头图像视频流的实时计算&#xf…

没有明确的报错信息,阿里云国际版Windows服务器无法远程连接

在远程连接失败时&#xff0c;如果您没有收到系统返回的报错信息&#xff0c;并且ECS实例是运行中的状态&#xff0c;然后再根据以下步骤进行排查&#xff1a; 步骤一&#xff1a;使用阿里云Workbench工具测试远程登录 步骤二&#xff1a;检查是否有收到黑洞通知 步骤三&…

ekho环境Linux通过Docker安装

第一步 下载ekho-master源码 https://github.com/hgneng/ekho/archive/master.zip 第二步 创建DockerFile # 使用Ubuntu作为基础镜像 FROM ubuntu:latest# 更新Ubuntu的软件包列表 RUN apt-get updateRUN apt-get install -y apt-utils RUN apt-get install -y wget RUN …

多维时序 | MATLAB实现BWO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现BWO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现BWO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现BWO-CNN-B…

C++ 日期 时间

C 标准库没有提供所谓的日期类型。C 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构&#xff0c;需要在 C 程序中引用 头文件。 有四个与时间相关的类型&#xff1a;clock_t、time_t、size_t 和 tm。类型 clock_t、size_t 和 time_t 能够把…

ElasticSearch之cat thread pool API

命令样例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/thread_pool?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下&#xff1a; node_name name …