java调用c++

news2025/3/9 6:34:17

VScode 配置java 并且使用JNA调用c++ 动态库

  1. 安装 Java 开发环境

    ​ 安装 JDK官网直接下载就好,推荐镜像下载

     通过网盘分享的文件:jdk-8u144-windows-x64.exe
    

​ 链接: https://pan.baidu.com/s/1Ov9bJkPNnOgcliBL-PSTFQ?pwd=pg43 提取码: pg43

  • ​ 直接安装安装完之后,设置环境变量。

2.安装 VS Code 插件

VS Code 扩展商店 搜索并安装:

  • “Extension Pack for Java”(微软官方)

  • “Java Dependency Viewer”(查看 Java 依赖)

  • “Java Test Runner”(运行测试)

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加 JNA 依赖

下载 JNA 依赖

  • 你需要手动下载

    jna-5.16.0.jar
    
    jna-platform-5.16.0.jar
    
    • 下载地址:JNA Releases
    • 通过网盘分享的文件:java
      链接: https://pan.baidu.com/s/11Ma1uzqtb_Pgg6jzxteYOA?pwd=v9wq 提取码: v9wq
  • *.jar 文件放到 lib/ 目录(相对于项目根目录)。

.vscode/settings.json 添加 java.project.referencedLibraries

{
    "java.project.referencedLibraries": [
        "lib/jna-5.16.0.jar",
        "lib/jna-platform-5.16.0.jar"
    ]
}
  • 这样,VS Code 的 Java 插件会将这些 JAR 作为项目的依赖库。
  • 之后你可以在 Java 代码中直接 import com.sun.jna.*;

VS Code 识别 JNA 依赖

  • 重新打开 VS Code,它会自动索引 lib/ 目录的 JAR 依赖。
  • Java Projects 侧边栏,你应该能看到 Referenced Libraries 里面包含 jna-5.16.0.jarjna-platform-5.16.0.jar

在 Java 中调用 C++ 代码

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

public interface HelloLibrary extends Library {
    HelloLibrary INSTANCE = Native.load("hello", HelloLibrary.class);
    void hello();
}
public class Main {
    public static void main(String[] args) {
        HelloLibrary.INSTANCE.hello();
    }
}

C++代码

#include <iostream>

extern "C" {
    void hello() {
        std::cout << "Hello from C++ library!" << std::endl;
    }
}

注意事项:

JNA 能够直接映射 C++ 的基本数据类型,但要注意 匹配 Java 和 C++ 数据类型,否则可能导致 崩溃或数据错误

extern "C" {
    const char* get_message() {
        return "Hello from C++";  // ⚠️ 不能返回局部变量!
    }
}

//正确用法
extern "C" {
    char* get_message() {
        const char* msg = "Hello from C++";
        char* buffer = (char*)malloc(strlen(msg) + 1);
        strcpy(buffer, msg);
        return buffer;
    }

    void free_message(char* ptr) {
        free(ptr);
    }
}

C++ 申请的内存 必须手动释放,否则会 内存泄漏。
JNA 只能管理 Java 侧的内存,但 C++ 侧必须自己管理。
类别注意事项
基本数据类型确保 Java 和 C++ 类型匹配,否则可能导致数据错误或崩溃。
传递 char\*(字符串)String 适用于 const char*,但 C++ 不能修改。如果 C++ 需要修改字符串,Java 需传递 ByteBufferMemory
C++ 返回字符串C++ 申请的内存必须手动释放,否则 会内存泄漏。不能返回局部变量指针。
传递结构体Java 结构体 必须继承 Structure,并注意 C++ 结构体对齐规则(可能需要 @FieldOrder)。
传递数组JNA 自动传递指针,C++ 端可直接修改数组内容。
传递指针(void\*在 Java 侧使用 Pointer 进行操作,避免类型转换错误。

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

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

相关文章

gitlab+jenkins+harbor+k8s安装操作流程之Jenkins

准备环境 一台centos7系统 4C/8G/100G 如果是jenkins2.5以上版本需要centos8以上版本 JDK1.8编译安装(最新版本jdk需要18以上) MAVEN编译安装 GIT编译安装 JDK1.8步骤 tar -zxvf 解压 vim /etc/profile export JAVA_HOME/data/jdk1.8.0_111 export JRE_HOME$JAVA…

【机械视觉】C#+VisionPro联合编程———【三、加载CogToolBlock工具详解,以及实例】

【机械视觉】C#VisionPro联合编程———【三、加载CogToolBlock工具详解&#xff0c;以及实例】 在VisionPro中&#xff0c;CogToolBlock 是一种容器工具&#xff0c;可以将多个视觉工具&#xff08;如CogBlob、CogPMAlign等&#xff09;组合成一个可复用的流程。通过C#与Visi…

启动wsl里的Ubuntu24报错:当前计算机配置不支持 WSL2,HCS_E_HYPERV_NOT_INSTALLED

问题&#xff1a;启动wsl里的Ubuntu24报错 报错信息&#xff1a; 当前计算机配置不支持 WSL2。 请启用“虚拟机平台”可选组件&#xff0c;并确保在 BIOS 中启用虚拟化。 通过运行以下命令启用“虚拟机平台”: wsl.exe --install --no-distribution 有关信息&#xff0c;请访…

信息安全与网络安全的区别_信息安全与网络安全之差异探析

在当今数字化时代&#xff0c;信息安全与网络安全成为了人们关注的热点话题。尽管这两个概念经常被提及&#xff0c;但它们之间存在着明显的区别。本文旨在探讨信息安全与网络安全的定义、范畴及应对策略&#xff0c;以帮助读者更好地理解和应对相关挑战。 一、定义与范畴的差…

充电桩快速搭建springcloud(微服务)+前后端分离(vue),客户端实现微信小程序+ios+app使用uniapp(一处编写,处处编译)

充电桩管理系统是专为中小型充电桩运营商、企业和个人开发者设计的一套高效、灵活的管理平台。系统基于Spring Cloud微服务架构开发&#xff0c;采用模块化设计&#xff0c;支持单机部署与集群部署&#xff0c;能够根据业务需求动态扩展。系统前端使用uniapp框架&#xff0c;可…

设计AI芯片架构的入门 研究生入行数字芯片设计、验证的项目 opentitan

前言 这几年芯片设计行业在国内像坐过山车。时而高亢&#xff0c;时而低潮。最近又因为AI的热潮开始high起来。到底芯片行业的规律是如何&#xff1f; 我谈谈自己观点&#xff1a;芯片设计是“劳动密集型”行业。 “EDA和工具高度标准化和代工厂的工艺标准化之后&#xff0c;芯…

串口助手的C#编写以及有人串口服务器USR-DR301的使用

本文介绍C#编写串口程序的要点,串口服务器USR-DR301(RS232转TCP)的使用、以及调试过程中碰到的两个问题: 1). 调用串口报“连到系统上的设备没有发挥作用”. 2). “所有文本框都变成了透明”的异常处理 代码见:https://download.csdn.net/download/qq_34047402/9046713…

Android中AIDL和HIDL的区别

在Android中&#xff0c;AIDL&#xff08;Android Interface Definition Language&#xff09; 和 HIDL&#xff08;HAL Interface Definition Language&#xff09; 是两种用于定义跨进程通信接口的语言。AIDL 是 Android 系统最早支持的 IPC&#xff08;进程间通信&#xff0…

sqlserver删除表记录语句,及删除表时清零ID的SQL语句

sqlserver中&#xff0c;删除表中所有记录的语句如下 Delete from tableName 例&#xff0c;删除表logs的所有记录 sqlserver&#xff0c;删除表中所有数据&#xff0c;标识列ID归零&#xff0c;保留表结构的语句 truncate table tableName 例&#xff0c;删除表logs的所…

【瞎折腾/ragflow】构建docker镜像并部署使用ragflow

说在前面 操作系统&#xff1a;win11docker desktop版本&#xff1a;4.29.0docker engin版本&#xff1a;v26.0.0ragflow版本&#xff1a;nightly 安装docker 官网 如果是win11&#xff0c;backend建议使用wsl2 安装好后打开docker desktop&#xff0c;不然docker命令用不了 …

哈弗赛恩公式计算长度JavaScript实现

哈弗赛恩公式&#xff08;Haversine formula&#xff09;是一种用于计算球面上两点间最短距离的数学方法&#xff0c;尤其适用于地球表面。本文将详细介绍哈弗赛恩公式的原理、应用以及如何使用JavaScript实现它。 一、哈弗赛恩公式原理 在球面几何中&#xff0c;哈弗赛恩公式…

大模型赋能金融行业:从理念到落地实践

思维导图 引言 &#x1f31f; 随着人工智能技术的飞速发展&#xff0c;大模型正在重塑各行各业&#xff0c;金融领域尤为明显。本文将基于业内领先金融科技公司的实践经验&#xff0c;系统探讨大模型在金融行业的落地应用、面临的挑战以及未来的发展方向。从AI发展历程、能力边…

数据结构篇——串(String)

一、引入 在计算机中的处理的数据内容大致可分为以整形、浮点型等的数值处理和字符、字符串等的非数值处理。 今天我们主要学习的就是字符串数据。本章主要围绕“串的定义、串的类型、串的结构及其运算”来进行串介绍与学习。 二、串的定义 2.1、串的基本定义 串&#xff08;s…

数据结构--【顺序表与链表】笔记

顺序表 template <class T> class arrList :public List<T> //表示 arrList 类以公有继承的方式继承自 List<T> 类 //公有继承意味着 List<T> 类的公共成员在 arrList 类中仍然是公共成员&#xff0c;受保护成员在 arrList 类中仍然是受保护成员。 { …

算法.习题篇

算法 — 地大复试 模拟 while循环和MOD循环计数 1.约瑟夫问题 http://bailian.openjudge.cn/practice/3254 using namespace std;bool isNoPeople(vector<bool> c)//判断当前数组是否一个小孩都没有了 {bool nopeople true;for (bool ival : c){if ( ival true)nop…

大语言模型进化论:从达尔文到AI的启示与展望

文章大纲 引言大语言模型中的“进化论”思想体现遗传变异过度繁殖和生存斗争大模型“过度繁殖”与“生存竞争”机制解析**一、过度繁殖:技术迭代的指数级爆发****二、生存竞争:计算资源的达尔文战场****三、生存竞争胜出关键要素****四、行业竞争格局演化趋势**核心结论自然选…

编程考古-Borland历史:《.EXE Interview》对Anders Hejlsberg关于Delphi的采访内容(上)

为了纪念Delphi在2002年2月14日发布的25周年(2020.2.12),这里有一段由.EXE杂志编辑Will Watts于1995年对Delphi首席架构师Anders Hejlsberg进行的采访记录。在这次采访中,Anders讨论了Delphi的设计与发展,以及即将到来的针对Windows 95的32位版本。 问: Delphi是如何从T…

系统架构设计师—系统架构设计篇—基于体系结构的软件开发方法

文章目录 概述基于体系结构的开发模型-ABSDM体系结构需求体系结构设计体系结构文档化体系结构复审体系结构实现体系结构演化 概述 基于体系结构&#xff08;架构&#xff09;的软件设计&#xff08;Architecture-Based Software Design&#xff0c;ABSD&#xff09;方法。 AB…

基于Python+Django的网上招聘管理系统

项目介绍 PythonDjango网上招聘系统的设计与实现(Pycharm Django Vue Mysql) 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。 - 前台功能包括&#xff1a;首页、岗位详情页、简历中…

Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...

Vue2&3 基礎性1. 關於Vue2和Vue3生命週期的差別2. Vue2&3組件之間傳參不同點Vue2 傳遞與接收Vue3 傳遞與接收 (使用script setup語法糖)Vue3 傳遞與接收 (不使用script setup語法糖) 3. Vue2&3 keep-alive 組件Vue2 keep-aliveVue3 keep-alive 進階性爲什麽POST請求…