相比JNI,JNA使用起来更灵活,无论是在内存管理方面还是编程的便捷性上,JNA都是值得称道的。
JNA利用代理实现来完成Java和Natvie的映射,在使用JNA编程的时候,首先要声明一个和本地库相同的方法,在实例化的时候,通过Native.loadLibrary('lib',ConnectorInterface.class),其中的ConnectorInterface中的方法声明和你要调用的C库函数的声明相同,只不过参数可能已经转换过了。
在现在版本JNA中已经提供了Win32中User32,Kernel32的本地库的Java版本。
下面贴一段测试通过的代码