当前位置: 首页 > news >正文

vs生成dll且被java通过jna调用

整篇文章分两步:

  1. vs2019 生成 dll
  2. java 通过 jna 调用 dll

一、vs2019 生成 dll

        在 vs 中创建一个新项目后,选择应用类型时,需要选择 dll 类型:

        确认后,分别定义一个头文件和源文件:

        test.h

#pragma once
_declspec(dllexport) int sum(int x, int y);

        test.c

_declspec(dllexport) int sum(int x, int y)
{
	return x + y;
}

        这时候点击编译就能生成对应的 dll 文件了,但这时候一般默认的是 debug 状态的32位版本,如果想要被正常调用,需要打开配置管理器将其改成 release 下的64位版本,如图所示:

         重新生成后,就可以在对应的 Release 目录下看见 test0904.dll 文件啦!

二、java 通过 jna 调用 dll

        若想 dll 文件被 java 调用,首先得将文件加载到项目中。这里既可以在代码中引入绝对路径,也可以将文件放到项目的 resource 目录中:

         另外还需要引入 jna 包,这里通过 maven 添加就可以。代码如下:

public class Test {
    public interface testDll extends Library {
        testDll TEST = (testDll) Native.load("testDir/test0904.dll", testDll.class);
        int sum(int x, int y);
    }

    public static void main(String[] args)
    {
        int res = testDll.TEST.sum(4, 5);
        System.out.println("dll test sum: " + res);
    }
}

        执行后控制台输出如下:

 

至此,整条链路就已完成,欢迎交流~

相关文章:

  • DDD - 六边形架构和CQRS架构
  • 宠物寄养小程序实战教程02
  • 【计算机网络】运输层习题(谢希仁)(1)
  • 微信小程序抓包-夜神模拟器结合BurpSuite抓包(可用于现在最新版本微信)
  • SAR/毫米波雷达 论文阅读 | Freehand, Agile, and High-Resolution Imaging, IEEE Access 2019
  • 神经网络一词在英文中是,网络词神经质什么意思
  • KOOM原理讲解(上)-JAVA内存分析
  • create-vite‘ 不是内部或外部命令,也不是可运行的程序
  • 【JS】牛客专项练习01
  • 计算机组成原理 | 总线
  • 简单神经网络算法原理,最简单的神经网络算法
  • 【在线教育】POI入门
  • 浅析RocketMQ-存储文件
  • 【JAVA】继承和多态的子类和父类代码执行顺序研究
  • ConcurrentHashMap put和扩容的源码深度解析(内含JDK8中3个bug以及修复的版本)
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【EOS】Cleos基础
  • Fabric架构演变之路
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Js基础——数据类型之Null和Undefined
  • Promise面试题,控制异步流程
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SpringBoot 实战 (三) | 配置文件详解
  • SpringCloud集成分布式事务LCN (一)
  • 从伪并行的 Python 多线程说起
  • 动态魔术使用DBMS_SQL
  • 反思总结然后整装待发
  • 十年未变!安全,谁之责?(下)
  • 使用agvtool更改app version/build
  • 使用API自动生成工具优化前端工作流
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # C++之functional库用法整理
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #Lua:Lua调用C++生成的DLL库
  • (13)Hive调优——动态分区导致的小文件问题
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二)c52学习之旅-简单了解单片机
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (五)MySQL的备份及恢复
  • (一)SpringBoot3---尚硅谷总结
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .gitignore文件设置了忽略但不生效
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Core 版本不支持的问题
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET 分布式技术比较
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验