您的位置:首页 > 编程语言 > Java开发

JNA (Java Native Access) 不通过JNI直接调用本地代码

2011-01-03 14:04 423 查看
相比JNI,JNA使用起来更灵活,无论是在内存管理方面还是编程的便捷性上,JNA都是值得称道的。

JNA利用代理实现来完成Java和Natvie的映射,在使用JNA编程的时候,首先要声明一个和本地库相同的方法,在实例化的时候,通过Native.loadLibrary('lib',ConnectorInterface.class),其中的ConnectorInterface中的方法声明和你要调用的C库函数的声明相同,只不过参数可能已经转换过了。

在现在版本JNA中已经提供了Win32中User32,Kernel32的本地库的Java版本。

下面贴一段测试通过的代码

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HWND;
/**
* JNA基本应用类,简单试用JNA
* @author HUIHUI
*
*/
public class JNATest {

public static void main(String[] args) {
// 实例化接口代理实现
CLibrary library = (CLibrary)Native.loadLibrary("msvcrt", CLibrary.class);
library.printf("s");

// User32实用
User32 user32 = User32.INSTANCE;

System.out.println(user32.GetSystemMetrics(0));

}

// 声明与本地库交互的接口
public interface CLibrary extends Library{

// C函数实现,与CZ中的声明形式一样
void printf(String s);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: