JAVA使用JNA调用DLL文件

JAVA 专栏收录该内容
10 篇文章 0 订阅

使用的工具为vs2017,IDEA

1. 使用vs2017生成dll文件

出现新建项目弹框

可以修改名称和位置;

等待项目生成;

鼠标右键头文件,添加,新建项

本项目该文件命名为TESTDll.h

编辑该文件

以C编译

#pragma once

extern "C"  __declspec(dllexport) double Add(double a, double b);
extern "C"  __declspec(dllexport) double Divide(double a, double b);

项目 源文件 文件夹中有一个和项目同名的.cpp文件,本项目重命名了TESTDll.cpp

 在该文件中编写函数;

// TEST.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h" //预编译头

#include "TESTDll.h"
#include <stdexcept> //标准的异常类

//_declspec(dllexport)
double Add(double a, double b)
{
	return a + b;
}

//_declspec(dllexport)
double Divide(double a, double b)
{
	if (b == 0)
	{
		throw std::invalid_argument("b 不能是 0!");
	}
	return a / b;
}

注意需要引用刚才新建的头文件     #include "TESTDll.h"

右击项目名,选择属性

点击配置管理器

根据项目要求,选择x86还是x64,必须和java项目相同

生成 》》解决方案

得到dll文件

2. 回到java项目中

在resources文件中新建dlls文件夹,将生成的dll文件拷贝到该文件夹中

在pom文件中引入依赖

<dependency>
     <groupId>net.java.dev.jna</groupId>
     <artifactId>jna</artifactId>
     <version>5.4.0</version>
</dependency>

有些jna的版本,虽然maven官方仓库中有依赖,但是加载不下来,可以换一个版本试试

新建test类测试一下

package zbinfo.util;

import com.sun.jna.Library;
import com.sun.jna.Native;

/**
 * @program: ZBSERVICE
 * @description: 测试调用dll
 * @author: Mr.Li
 * @create: 2019-09-03
 **/
public class test {
    public interface TestDll1 extends Library{
        TestDll1 instance = (TestDll1) Native.load("H:/project/svn/监测预警评估/trunk/ZBSERVICE/src/main/resources/dlls/TEST",TestDll1.class);
        public double Add(double a, double b);
        public double Divide(double a, double b);
    }

    public static void main(String[] args){
        double sum = TestDll1.instance.Add(10, 5);
        double divide = TestDll1.instance.Divide(10, 5);
        System.out.println("Add(10, 5) = " + sum);
        System.out.println("Divide(10, 5) = " + divide);
    }
}

本文使用Native.load()函数,第一个参数引入的时dll文件的绝对路径,

还可以使用Native.loadLibrary()函数

运行主函数;

运行结果为:

 

  • 0
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值