jna调用原生代码——传递参数

本文介绍了如何使用Java Native Access (JNA) 调用Windows API,特别是关注参数传递的注意事项。内容包括:无符号整数的转换、ASCII与Unicode版本API的选择、Structure的使用、数据类型匹配问题,以及函数指针和回调函数的简要提及。
摘要由CSDN通过智能技术生成

用java做个小玩意,需要调用windows操作系统的动态链接库提供的API函数。

选来选去最终决定用jna实现调用,简单方便。

 

这个过程中遇到的最大障碍就是怎么传递函数的参数!

ps:原生代码在本文中指x86cpu下运行的c\c++代码。

jre也必须是32位的jre,否则可能发生不明原因的错误。

整理了一个jna与windous API(__stdcall调用约定)的库的数据类型对应表

 

 

其中值得注意的:

1:

c\c++中有无符号整数,java中没有,传递接受无符号的数据时要做转换。

例子:unsigned int xx(unsigned int);

你传递参数-1(0xffffffff),函数xx中会认为你传递的参数的值为4294967295

函数返回2147483648(0x80000000),java会认为函数返回的是-2147483648

2:

windows系统提供的api一般都有两个版本:asci 和 Unicode版本,在调用这些api时可能要明确指定调用哪个版本的api.

例如:GetClassName函数就分别有

int GetClassNameA(HWND hWnd, LPSTR IpClassName, int nMaxCount);

int GetClassNameW(HWND h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值