好好生活,努力工作,天天向上!

语源科技BlogJava 首页 新随笔 联系 聚合 管理
  46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks
      JNA全称是Java Native Access,Sun推出的一种调用本地方法技术,比起它的同门师兄JNI,JNA大大简化了调用本地方法的过程,使用也比较方便, JNA是在JNI的基础上完善的,用青出于蓝而胜于蓝来形容一点不为过,下面看一下JNI的调用过程:    

      

      使用JNI你得完成上面这些步骤,比较麻烦,而是用JNA就省事多了,基本上不需要脱离Java环境就可以完成。
  
   JNA项目主页是https://jna.dev.java.net/, 目前最新的版本是3.2.4 。下载时记得将自带的Example.jar 也下载下来,这个里面提供了一些JNA的例子,通过这个能够更快的了解JNA

    使用JNA的调用本地方法的时候需要自定义数据结构,下面我们通过调用Windows提供的的锁定工作站方法来了解一下JNA

    1首先查询Windows API知道锁定工作站的方法在user32.dll中定义,接下来定义一个接口来继承JNALibrary.java接口,用作声明DLL库文件,这里我们就把它命名为User32:      

 public interface User32 extends Library {}

    2查询user32.dll提供的API得知锁定工作方法是LockWorkStation,返回类型是boolean型,在User32.java中新增相应的方法:

boolean LockWorkStation();

         这样我们的User32.java这个类就定义好了。接下来我们写测试程序进行调用。

    3、编写测试类比如LockWorkStation.java,首先通过JNANative类加载对应的dll:     

User32 user32 = (User32) Native.loadLibrary("user32", User32.class);

        然后就可以调用LockWorkStation方法了,完整代码如下:      

public class LockWorkStation {
    
public static void main(String[] args) {
       User32 user32 
= (User32) Native.loadLibrary("user32", User32.class);
       user32.LockWorkStation();
    }
}

  这里说明