Java使用JNA调用DLL库
Java调用DLL方法有三种,JNI、JNA、JNative, 本文为JNA
JNA为使用jna.jar包,下载地址:http://www.java2s.com/Code/Jar/j/Downloadjna325jar.htm
1.编写c/c++代码,创建测试DLL --> 新建win32项目MyDLL,勾选DLL
//myDLL.h
#define JNADLL extern "c" _declspec(dllexport)
JNADLL int add(int x, int y);
//myDLL.cpp
int add(int x, int y){
return x + y;
}
点击生成解决方案生成MyDLL.dll文件,默认放在项目DEBUG目录里
2.编写Java测试代码
新建Java项目 --> 新建接口JNATestDLL
public interface JNATestDLL extends Library {
JNATestDLL instance = (JNATestDLL)Native.loadLibrary("MyDLL",JNATestDLL.class);
public int add(int x, int y);
}
编写测试类
public class CallDLLJNA{
public static void main(String args[]){
JNATestDLL test = JNATestDLL.instance;
int c = test.add(1,2);
System.out.println(c);
}
}
注意
- 待导出的C函数前一定要加extern"c",不然导出的DLL JNA找不到
#define JNADLL extern “C” __declspec(dllexport) - 导出的DLL文件放在任意路径,推荐放在项目路径下
Java使用JNA调用DLL库的更多相关文章
- java 用JNA调用dll 参考文档
1 Java调用C语言动态库(JNA方式):回调函数.结构体数组传参.结构体数组返回 2jna结构体数组 JNA结构体数组 3JNA调用C语言动态链接库学习实践总结 4 Java 通过 JNA 调 ...
- Java使用JNative调用DLL库
编写测试DLL文件,源文件参照JNA调用用的DLL文件.地址:http://www.cnblogs.com/vevy/p/9076941.html (很重要)右键项目 --> 属性 --> ...
- java使用JNA调用dll
1.自己搞一个dll出来.参考下面链接 http://blog.csdn.net/lqena/article/details/46357165. 2.下载jar jna-4.2.1.jar. 3.复制 ...
- Java使用JNI调用DLL库
JNI是Java自带的方法,不需要引入第三方jar包,优点是因为是java自带的方法,兼容性较好,缺点就是代码书写繁琐 新建Java项目Test --> 新建测试类TestNative,声明本地 ...
- Java 通过Jna调用dll路径问题
调试阶段 C++ dll --> window/system32C# dll --> C:\Program Files\Java\jdk1.8.0_171\bin [jdk bin] 打包 ...
- Java(使用JNA)调用DLL库与C#调用DLL库的对比
前言:在项目中经常使用DLL库对硬件进行操作,在发卡过程中使用频率尤为多,今天就Java与C#中调用DLL库的使用区别做一个介绍,本文着重具体的代码编写,具体过程看以下代码. 前提条件: 笔者已经封装 ...
- 使用jna调用dll,jdk位数和dll位数的关系
最近在学习jna,发现dll文件能能否成功调用取决于jdk位数. 32位jdk只能使用32位的dll,64位jdk只能使用64位的dll,否则位数不对应的话报的错是 "Exception i ...
- Java通过JNI调用dll详细过程(转)
源:Java通过JNI调用dll详细过程 最近项目有这样一个需求,在已有的CS软件中添加一个链接,将当前登录用户的用户名加密后放在url地址中,在BS的login方法里通过解密判断,如果为合法用户则无 ...
- JNA调用DLL(入门):让你一眼就学会
DLL(Dynamic Link Library)文件,是基于C语言的动态链接库文件,就是一些封装好的方法,打成dll格式包,供别人调用 JNA是一种能够使Java语言使调用DLL的一种技术, 首先, ...
随机推荐
- xcode 制作静态库文件(.a)
参考: http://www.jb51.net/article/37853.htm 摘要: 1. 获取.a文件的信息 lipo -info /Users/pjk1129/De ...
- [译]curl_multi_info_read
curl_multi_info_read - read multi stack informationals读取multi stack中的信息 SYNOPSIS#include <curl/cu ...
- Xml学习笔记(2)
不同的xml文档构可能要用到不同的方法进行解析这里用到的是例如<student name="张三" id="1" sex="男"/&g ...
- 配置Tomcat && Http简介
WEB环境搭建 1. Web服务器 Web服务器主要用来接收客户端发送的请求和响应客户端请求. 作为JavaWeb程序来说,还需要有Servet容器,容器的主要作用就是调用java程序处理用户发送的请 ...
- [转] Android利用Fiddler进行网络数据抓包
主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...
- Python3.4的Pillow库实现验证码图片
转自 http://blog.csdn.net/bin381/article/details/41969493 from PIL import Image,ImageDraw, ImageFont, ...
- MyEclipse 快捷键方法
MyEclipse企业级工作平台(My Eclipse Enterprise Workbench,简称MyEclipse)是对EclipseIDE的扩展,利用它可以在数据库和J2EE的开发.发布,以及 ...
- Spring scheduled cron 表达式
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素. 按顺序依次为 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数) 月(0~11) 天( ...
- (转)版本管理工具介绍——SVN篇(一)
http://blog.csdn.net/yerenyuan_pku/article/details/72620101 SVN是何物 SVN是Subversion的简称,是一款集中式的开源版本控制系统 ...
- mac install telnet
问题: -bash: telnet: command not found -bash: brew: command not found 解决: /usr/bin/ruby -e "$(cur ...