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 ...
随机推荐
- MySQL数据库 053
mysql 使用: 开启服务端软件 mysqld 开启客户端软件 mysql -uroot -p mysql : 就是一个基于socket编写的c/s架构的软件 概念介绍 : 数据库服务器 : 运行数 ...
- UML-4-初始不是需求阶段
1.初始阶段到底做什么? 确定项目外包还是自研.成本多少. 系统边界 关键的10%的用例.非功能性需求分析,业务案例创建 开发环境准备 而需求分析是在细化阶段进行的. 2.初始阶段(或细化阶段早期)应 ...
- 2.7 Go channel
channel简单示例 package main import ( "fmt" "time" ) //channel的创建,发送,接收 func channe1 ...
- 20190430-screen、client、offset、scroll等JS中各种宽度距离
参考文献: JavaScript概念之screen/client/offset/scroll/inner/avail的width/left
- Java 数组算法列题解析
1.声明一个char类型的数组, 从键盘录入6个字符[1]遍历输出[2]排序[3]把char数组转化成一个逆序的数组 总结:分析问题时,先问自己,需要用到什么? 对于这题,第一步:先写一个main方 ...
- 3dsmax2014卸载/安装失败/如何彻底卸载清除干净3dsmax2014注册表和文件的方法
3dsmax2014提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dsmax2014失败提示3dsmax2014安装未完成,某些产品无法安装,也有时候想重新 ...
- Robot Framework自动化测试三(selenium API)
Robot Framework Selenium API 说明: 此文档只是将最常用的UI 操作列出.更多方法请查找selenium2Library 关键字库. 一.浏览器驱动 通过不同的浏览器 ...
- word-wrap和word-break的区别吗?
word-wrap: css的 word-wrap 属性用来标明是否允许浏览器在单词内进行断句,这是为了防止当一个字符串太长而找不到它的自然断句点时产生溢出现象. word-break: css的 w ...
- java项目部署总结
环境问题一定要搞定,今天下午因为我本机的mysql版本较高,部署一个java项目,mysql jar驱动包8.0的版本无法使用,浪费了好长时间找问题. 总结:遇到问题多方位思考,尽快解决掉,提高工作效 ...
- C#操作Redis Hash数据表
/// <summary> /// Redis Hash /// </summary> public static void Redis_Hash() { RedisClien ...