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 ...
随机推荐
- Python——制作模块
步骤一:创建包 步骤二:编辑示例模块代码 __init__调用: 步骤三:创建setup.py from distutils.core import setup setup(name="pa ...
- 安装vs2013要求重启后安装
解决方案: 卸载360,然后杀毒, 重启电脑就可以直接安装vs了
- Python处理文件和查漏
import os,re def change_filename(root): ''' 批量修改excel文件名 ''' for root_,_, fs in os.walk(root): for f ...
- Jmeter运行badboy录制的脚本
前言 进行性能测试的站点为:在本地搭建的bugfree 一.badboy录制脚本 1.启动bugfree服务 2.打开badboy进行脚本录制 2.1.打开badboy,按下启动录制按钮,在地址栏中输 ...
- poj 3750 小孩报数问题
小孩报数问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11527 Accepted: 5293 Descripti ...
- 忘记root密码的解决方法——进入单用户模式修改
(1)在系统还在读秒的时候按任意键,你会看到如下界面: 然后按下‘e’
- win7(64)+vs2010+opencv2.3.1配置问题:应用程序无法正常启动0xc000007b
根据:毛星云(浅墨)的[OpenCV入门教程之一] 安装OpenCV:OpenCV 3.0.OpenCV 2.4.8.OpenCV 2.4.9 +VS 开发环境配置 文章链接:http://blog. ...
- pyhon-爬虫实战抓取豆瓣top250到mysql
采集地址https://movie.douban.com/top250 一.创建mysql数据库 CREATE TABLE `t_doubantop` ( `id` int(11) unsigned ...
- [转]How to Use Web API OData to Build an OData V4 Service without Entity Framework
本文转自:http://www.odata.org/blog/how-to-use-web-api-odata-to-build-an-odata-v4-service-without-entity- ...
- js 常用脚本
1.判断电话号码和手机号码 var tel = $("#tel").val(); if (isNotBlank($.trim(tel))) { //不为空的情况下判断符合手机号码标 ...