Java10如何调用C/C++的库jna具体详解

第一步 导入jna的依赖(就是jni本地方法接口的,调用c,c++的库来实现的)

很方便的一个包,帮我们解决啦很多本地方法接口上的痛点,比如Java和C数据类型的转换等等;

		<dependency>
			<groupId>net.java.dev.jna</groupId>
			<artifactId>jna</artifactId>
			<version>5.5.0</version>
		</dependency>
		<dependency>
			<groupId>net.java.dev.jna</groupId>
			<artifactId>jna-platform</artifactId>
			<version>5.5.0</version>
		</dependency>

第二步,创建自己的DLL

打开VisualStudio,创建一个可导出的DLL动态链接库工程,我的工程名是TESTDLL
主要更改这两处

TESTDLL.cpp头文件

// TESTDLL.cpp : 定义 DLL 的导出函数。
//

#include "pch.h"
#include "framework.h"
#include "TESTDLL.h"


// 这是导出变量的一个示例
TESTDLL_API int nTESTDLL=0;

// 这是导出函数的一个示例。
TESTDLL_API int fnTESTDLL(void)
{
    return 0;
}

//添加啦一个加法的函数;
TESTDLL_API int add(int a,int b)
{
    return a+b;
}

// 这是已导出类的构造函数。
CTESTDLL::CTESTDLL()
{
    return;
}

TESTDLL.h头文件

// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 TESTDLL_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// TESTDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif

// 此类是从 dll 导出的
class TESTDLL_API CTESTDLL {
public:
	CTESTDLL(void);
	// TODO: 在此处添加方法。
};

extern TESTDLL_API int nTESTDLL;

TESTDLL_API int fnTESTDLL(void);

//在头文件处声明咱们刚添加的add函数; extern "C"必须加,原因可以去网上找;
extern "C" TESTDLL_API int add(int a, int b);

之后点击配置管理器进入,平台更改为x64的,再点击生成解决方案生成64位的DLL;
在这里插入图片描述

第三步调用DLL中的方法

  • 打开IDEA,新建一个主函数类,将上边生成的DLL随便找个地方放入;
  • 新建一个接口,继承Library接口;
    注意,jni是java与c的接口,若想调用C的库,不能直接用类调,需要新建一个接口才可以;也就是一个接口对应一个DLL

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

public interface Mydll extends Library {
    Mydll mydll =  Native.load("D:\\JAVA\\MY_java_PROJIECT\\legend\\src\\TESTDLL.dll", Mydll.class);

    int add(int a, int b);
}

主函数调用;

public class TestDll {
    public static void main(String[] args) {
        System.out.println(Mydll.mydll.add(1, 2));
    }
}

打印结果

具体视频地址,感谢up的视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值