JAVA使用JNA调用DLL(VS2019创建DLL文件)

JAVA使用JNA调用DLL(VS2019创建DLL文件)

  1. 创建DLL
    前提:安装好了Visual Studio(安装地址:https://visualstudio.microsoft.com/zh-hans/)
    1.1 打开应用,创建新项目
    1.2 选择 具有导出项的(DLL)动态链接库
    JAVA使用JNA调用DLL(VS2019创建DLL文件)_第1张图片
    1.3 填写项目名称,选择存放地址
    JAVA使用JNA调用DLL(VS2019创建DLL文件)_第2张图片
    1.4编写代码
    头文件.h为声明宏,结构体,函数的代码
    源文件.c(.cpp)为实现函数代码
    pch.h代码:
// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。

#ifndef PCH_H
#define PCH_H

// 添加要在此处预编译的标头
#include "framework.h"

#endif //PCH_H

//定义宏
#ifdef IMPORT_DLL
#else
#define IMPORT_DLL extern "C" _declspec(dllimport) //指的是允许将其给外部调用
#endif

IMPORT_DLL int test();
IMPORT_DLL int test2();

IMPORT_DLL int add(int a, int b);
IMPORT_DLL int minus(int a, int b);
IMPORT_DLL int multiply(int a, int b);
IMPORT_DLL double divide(int a, int b);

pch.cpp代码:

// pch.cpp: 与预编译标头对应的源文件

#include "pch.h"

// 当使用预编译的头时,需要使用此源文件,编译才能成功。

int test() {
	return 1;
}

int test2() {
	return 2; 
}
int add(int a, int b)
{
	return a + b;
}

int minus(int a, int b)
{
	return a - b;
}

int multiply(int a, int b)
{
	return a * b;
}

double divide(int a, int b)
{
	double m = (double)a / b;
	return m;
}

1.5 配置
点击 调试 —> XXX调试属性
根据自己需求配置
JAVA使用JNA调用DLL(VS2019创建DLL文件)_第3张图片
1.6 生成DLL文件
JAVA使用JNA调用DLL(VS2019创建DLL文件)_第4张图片

  1. JAVA调用DLL
    2.1 pom引入jna
<dependency>
   <groupId>net.java.dev.jnagroupId>
   <artifactId>jnaartifactId>
   <version>5.5.0version>
dependency>

2.2 将生成的dll复制到项目跟目录下
代码:

public interface CLibrary extends Library {

   CLibrary INSTANCE = (CLibrary) Native.loadLibrary("DomeDll", CLibrary.class);

   public  int test();
   public int test2();

   public int add(int a, int b);
   public int minus(int a, int b);
   public int multiply(int a, int b);
   public double divide(int a, int b);

}

调用:

public static void main(String[] args) {

    int i = CLibrary.INSTANCE.test();
    System.out.println("i:"+i);
    
   int sum = CLibrary.INSTANCE.add(1,2);
    System.out.println("sum:"+sum);
    int diff = CLibrary.INSTANCE.minus(5,3);
    System.out.println("diff:"+diff);
    
}

JAVA使用JNA调用DLL(VS2019创建DLL文件)_第5张图片
注意:如果c中是指针类型,java要选择同类型的比较大的长度类型接收
.h:
JAVA使用JNA调用DLL(VS2019创建DLL文件)_第6张图片JAVA使用JNA调用DLL(VS2019创建DLL文件)_第7张图片

java:JAVA使用JNA调用DLL(VS2019创建DLL文件)_第8张图片

你可能感兴趣的:(JAVA使用JNA调用DLL(VS2019创建DLL文件))