Java通过Jnative调用windows API接口学习总结
前几天在做一个自动测试wifi性能的工具,由于之前没做过,于是在万能的互联网找各种资料,折腾了几天,总算是做出来了。
在这里算是整理总结一下吧。
工具是在netbeans上开发的,用java写的。我要实现的功能是去获取电脑网卡中的wifi列表,然后逐个自动连接,测试,断开,连接下一个。
由于java并没有封装wlan相关的接口,于是需要去调用windows API的接口;但是又不能直接去调用,需要通过JNATIVE去调。
一开始我直接通过jnative去调windows WLAN的接口,但是有个问题,从Java传参到windows API接口很容易出错。于是又换了个方法,先用C++对windows WLANAPI接口进行一层封装,参数设为java层容易识别的参数,比如string,int等,然后再通过jnative去调我们封装好的方法。
补充一点:在发布软件的时候,如果在没有安装VS的电脑上,会识别不到我们生成的DLL文件从而导致报异常。这个问题我们可以这么解决:将C++生成DLL的项目包拷到工具目录下,然后再Java层修改,让它直接去调用项目包下的dll文件。
以下是我找的一些比较有用的资料:
关于wlanapi的:
0.最有用的资料,微软的windows API接口说明
https://msdn.microsoft.com
1.C#使用Managed Wifi API连接带密码的SSID .
http://blog.csdn.net/much0726/article/details/50686465
2.VC++玩转Native Wifi API
http://blog.csdn.net/lincyang/article/details/34430939/
3.Native wifi API使用 ,接口简介
http://blog.csdn.net/whatday/article/details/41518949
4.Native Wifi 中 WlanSetProfile 出现1206错误的几种可能及解决方法
http://blog.csdn.net/ytrock/article/details/48272371
5.C#编程使用Managed Wifi API连接无线SSID
http://blog.csdn.net/m593192219/article/details/9363355
关于JNATIVE使用:
1.JAVA调用DLL,Java调用DLL的常用方法
http://www.codeweblog.com/%E5%AD%A6%E4%B9%A0jna-jnative%E4%B8%AA%E4%BA%BA%E6%80%BB%E7%BB%93/
2.JNative使用深入解析——基本编程
http://fenger-chui.iteye.com/blog/1154435
关于DLL的封装
1.C/C++中生成和使用DLL
http://blog.sina.com.cn/s/blog_4aa8874401016vfe.html
2.C++ dll调用-动态(显式) 传参调用
http://www.cnblogs.com/lhbssc/archive/2012/02/08/2342853.html