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版本。
下面贴一段测试通过的代码
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); } }
相关文章推荐
- Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用
- NDK开发(1)——JAVA通过JNI调用C代码详细步骤
- Cocos2d-x3.3RC0通过JNI调用Android的Java层代码,实现分享功能
- 【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
- JNI技术2---本地代码反调用java类方法过程详解
- Cocos2d-x中通过JNI进行C++调用Java代码
- JAVA通过JNI调用c++本地方法dll
- 深入了解android平台的jni---本地多线程调用java代码
- JNI技术2---本地代码反调用java类方法过程详解
- cocos2dx:C++层通过JniHelper调用JAVA层代码进而调用Android手机应用接口
- 通过JNI实现java调用C代码和C代码调用java的代码
- JAVA通过JNI调用本地C语言方法
- day day up--Java通过JNI调用本地方法
- 【iOS-cocos2d-X 游戏开发之十三】详细讲解在Xcode中利用预编译并通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)!
- JAVA通过JNI调用本地C语言方法
- 深入了解android平台的jni的原理以及本地多线程调用java代码
- 关于浏览器页面直接调用本地exe和java代码调用本地exe问题
- 浅谈JAVA通过JNI调用本地的DLL
- Java 通过JNI调用C或者CPP代码
- Java 通过JNI调用C或者CPP代码