java jna c 的dll_java 调用 windows 动态链接库(.dll)之 JNA 的使用

首先是 JNA 需要的两个 依赖包

net.java.dev.jna

jna

5.2.0

net.java.dev.jna

jna-platform

5.2.0

项目中 dll 文件存放位置

两种方式存放,选择任意一种都可以(推荐第一种)

项目 resources 目录下新建文件夹:win32-x86-64 ,并将 dll 文件放入其中

放入操作系统目录中 windows/system32/

JNA 的实现 demo

找到一个 dll 需要实现的接口(可以从对应的.h 文件中查找)

HANDLE __stdcall device_open(__int16 port,unsigned long baud);

在 JAVA 代码中调用接口(C/C++与 JAVA 类型对照表请往下看)

import com.sun.jna.Native;

import com.sun.jna.NativeLong;

import com.sun.jna.platform.win32.WinNT.HANDLE;

import com.sun.jna.win32.StdCallLibrary;

public class JnaDemo {

public interface MTX32 extends StdCallLibrary {

/**

* 参数1:需要调用的dll文件名

*/

MTX32 INSTANCE = Native.load("mtx_32", MTX32.class);

/**

* 根据C与java参数对照表写出对应接口

*/

HANDLE device_open(Short port, NativeLong baud);

}

public static void main(String[] args) {

//调用接口

MTX32 mtx32 = MTX32.INSTANCE;

HANDLE handle = mtx32.device_open((short) 1, new NativeLong(115200, true));

System.out.println(handle);

}

}

Default Type Mappings

Java primitive types (and their object equivalents) map directly to the native C type of the same size.

Native Type

Size

Java Type

Common Windows Types

char

8-bit integer

byte

BYTE, TCHAR

short

16-bit integer

short

WORD

wchar_t

16/32-bit character

char

TCHAR

int

32-bit integer

int

DWORD

int

boolean value

boolean

BOOL

long

32/64-bit integer

NativeLong

LONG

long long

64-bit integer

long

__int64

float

32-bit FP

float

double

64-bit FP

double

char*

C string

String

LPTCSTR

void*

pointer

Pointer

LPVOID, HANDLE, LPXXX

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值