Java通过jna调用c++动态库
1 环境准备
操作系统:windows 10,x64
jna,jna-4.4.0.jar
c++开发环境,vc2013
java开发环境,eclipse,jdk8
2 dll开发
通过vc2013创建动态库(dll)工程项目JnaTestDll,编写需要导出的函数定义及实现,如下:
JnaTestDll.h
#ifdef JNATESTDLL_EXPORTS
#define JNATESTDLL_API __declspec(dllexport)
#else
#define JNATESTDLL_API __declspec(dllimport)
#endif
extern "C" JNATESTDLL_API int Add(int a, int b);
extern "C" JNATESTDLL_API int Sub(int a, int b);
JnaTestDll.cpp
#include "stdafx.h"
#include "JnaTestDll.h"
// 这是导出函数的一个示例。
extern "C" JNATESTDLL_API int Add(int a, int b)
{
return a + b;
}
extern "C" JNATESTDLL_API int Sub(int a, int b)
{
return a - b;
}
配置环境选择Release x64

编译生成JnaTestDll.dll。
3 java调用dll
使用eclipse创建java应用工程项目,build path引入jna-4.4.0.jar。
将JnaTestDll.dll拷到java工程根目录(和src同一目录)。
编写接口类JnaTestDll
package com.kld.jnatest;
import com.sun.jna.Library;
import com.sun.jna.Native;
public interface JnaTestDll extends Library
{
JnaTestDll INSTANCE = (JnaTestDll)Native.loadLibrary("JnaTestDll", JnaTestDll.class);
public int Add(int a, int b);
public int Sub(int a, int b);
}
main函数中调用
int add = JnaTestDll.INSTANCE.Add(2, 1);
int sub = JnaTestDll.INSTANCE.Sub(2, 1);
System.out.println("Add(2,1) = " + add);
System.out.println("Sub(2,1) = " + sub);
输出结果如下所示:

Java通过jna调用c++动态库的更多相关文章
- java使用JNA框架调用dll动态库
这两天了解了一下java调用dll动态库的方法,总的有三种:JNI.JNA.JNative.其中JNA调用DLL是最方便的. ·JNI ·JNA ·JNative java使用 JNI来调用dll动态 ...
- Java调用dll动态库
最近项目里使用java调用dll动态库,因此研究了一下这方面的东西. 使用的工具包如下 <dependency> <groupId>net.java.dev.jna</g ...
- java 用JNA调用dll 参考文档
1 Java调用C语言动态库(JNA方式):回调函数.结构体数组传参.结构体数组返回 2jna结构体数组 JNA结构体数组 3JNA调用C语言动态链接库学习实践总结 4 Java 通过 JNA 调 ...
- JNI_Android项目中调用.so动态库
JNI_Android项目中调用.so动态库 2014年6月3日 JNI学习 參考:http://blog.sina.com.cn/s/blog_4298002e01013zk8.html 上一篇笔者 ...
- c#调用c++动态库的一些理解
调用c++动态库一般我们这样写 [DllImport("UCamer.dll", CallingConvention = CallingConvention.Winapi)] ...
- C#调用C++动态库(dll)
在实际软件开发过程中,由于公司使用了多种语言开发,在C#中可能需要实现某个功能,而该功能可能用其他语言已经实现了,那么我们可以调用其他语言写好的模块吗?还有就是,由于C#开发好的项目,我们可以利用re ...
- C#总结(四)调用C++动态库
由于公司很多底层的SDK,都是C++开发,上层的应用软件却是C# Winform程序.在实际工作的过程中,就经常碰到了C# 程序调用C++ 动态库的问题.最近一直在和C++ 打交道,C# 怎么调用C+ ...
- 【C#】 使用Gsof.Native 动态调用 C动态库
[C#] 使用Gsof.Native 动态调用 C动态库 一.背景 使用C# 开发客户端时候,我们经常会调用一些标准的动态库或是C的类库.虽然C# 提供的PInvoke的方式,但因为使用的场景的多变, ...
- python调用.net动态库
# python调用.net动态库 ### pythonnet简介------------------------------ pythonnet是cpython的扩展- pythonnet提供了cp ...
随机推荐
- 我理解的Future模式
学而时习之,不亦说乎! --<论语> 什么是Future? 考虑一个场景,为了完成某个业务,我需要同时查询三张表的三条独立数据.但 ...
- 《WCF全面解析》-上册 1-3章 读书笔记
第一章.WCF简介 ESB全称为Enterprise Service Bus,即企业服务总线.把所有的服务统筹到一个总线里面请求和分发,方便管理. WCF(Windows Communication ...
- 小程序点击清除input内的内容不生效
如下图,点击右侧的按钮清除input的内容,当获取焦点时点击按钮是会穿透的清除不了input,使用cover-image和cover-view页面不起作用 解决办法:input在左侧,按钮在右侧使他们 ...
- Centos 7.0设置/etc/rc.local无效问题解决
安装centos7以后按照以往习惯修改rc.local添加开机启动命令,但重启后发现无效,再次重启发现依然如故 检查系统rc.local服务运行情况 systemctl | grep "rc ...
- Java学习之路(一):日常第一课,认识JAVA
Java的介绍 语言的起源 Java是SUN(Stanford University Network 斯坦福大学网络公司) 1995年推出的一门高级编程语言. Java名称的来源: Java最初是被命 ...
- 我的Python升级打怪之路【五】:Python模块
模块,是一些代码实现了某个功能的集合 模块的分类: 自定义模块 第三方模块 内置模块 导入模块 import module from module.xx.xx import xx from modul ...
- solr的安装及配置详细教程/solr入门教程
1 solr的下载 从Solr官方网站(http://lucene.apache.org/solr/ )下载Solr最新版本,根据Solr的运行环境,Linux下需要下载solr-7.3.1.tgz, ...
- 关于echart没有数据显示暂无数据
对于echart当没有数据的时候怎么显示, 首先,如果你的series的值为空值的话,曲线将是一片空白,什么都不会有,所以在这里就要进行一个判断,如果没有值的话,人为的添加一个键 if(Object. ...
- 关于sql通配符检索问题-【.NET】
确定给定的字符串是否与指定的模式匹配.模式可以包含常规字符和通配符字符.模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配.然而,可使用字符串的任意片段匹配通配符.与使用 = 和 != 字符串比 ...
- 4、在Shell程序中的使用变量
学习目标变量的赋值变量的访问变量的输入 12-4-1 变量的赋值在Shell编程中,所有的变量名都由字符串组成,并且不需要对变量进行声明.要赋值给一个变量,其格式如下:变量名=值.注意:等号(=)前后 ...