- 浏览: 7338840 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在JNA官网上还介绍了另外一种调用C/C++动态库的方式:直接函数(方法)映射。其编程方法非常简单,连接口定义都免了,只需在类声明中使用关键字native声明动态库的函数,然后在调用动态库的函数之前先调用Native.register方法注册(加载)动态库即可。
* 在JNA官网上还介绍了另外一种调用C/C++动态库的方式:直接函数(方法)映射。
* 其编程方法非常简单,连接口定义都免了,只需在类声明中使用关键字native声明动态
* 库的函数,然后在调用动态库的函数之前先调用Native.register方法注册(加载)动态库即可。
* 说明:该程序既可以在Windows环境下运行也可以在Linux环境下运行。如果是在Windows下,将加载msvcrt.dll动态库;如果是在Linux下,将加载libm.so动态库。
linux和unix的libm.so在/lib/libm.so
在Platform中的代码如下常量:
C_LIBRARY_NAME = osType == WINDOWS ? "msvcrt" : osType == WINDOWSCE ? "coredll" : "c";
MATH_LIBRARY_NAME = osType == WINDOWS ? "msvcrt" : osType == WINDOWSCE ? "coredll" : "m";
package com.etrip.jna.win; import com.sun.jna.IntegerType; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; import com.sun.jna.Pointer; /** * * @Title: TODO * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company: * @Date:2012-12-22 * @author longgangbai * @version 1.0 */ public class CDirectJNA { static class CLibrary { public static class size_t extends IntegerType { public size_t() { super(Native.POINTER_SIZE); } public size_t(long value) { super(Native.POINTER_SIZE, value); } } public static native Pointer memset(Pointer p, int v, size_t len); public static native Pointer memset(Pointer p, int v, int len); public static native Pointer memset(Pointer p, int v, long len); public static native long memset(long p, int v, long len); public static native int memset(int p, int v, int len); public static native int strlen(String s1); public static native int strlen(Pointer p); public static native int strlen(byte[] b); static { Native.register(Platform.C_LIBRARY_NAME); } } static interface CInterface extends Library { CInterface instance = (CInterface) Native.loadLibrary( Platform.C_LIBRARY_NAME, CInterface.class); Pointer memset(Pointer p, int v, int len); int strlen(String s); } public static void main(String[] args) { String str="longgangbai"; System.out.println(CLibrary.strlen(str) +" "+CInterface.instance.strlen(str)); } }
package com.etrip.jna.win; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; /** * @Title: TODO * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Date:2012-12-22 * @author * @version 1.0 */ public class MathDirectJNA { /** *通过注册的方式操作cos */ static class MathLibrary { public static native double cos(double x); static { Native.register(Platform.MATH_LIBRARY_NAME); } } /** * 通过jni方式访问操作cos */ private static class JNI { static { System.load(Platform.MATH_LIBRARY_NAME); } private static native double cos(double x); } /** *通过加载的方式操作cos */ interface MathInterfaceLibrary extends Library { MathInterfaceLibrary instance = (MathInterfaceLibrary) Native.loadLibrary( Platform.MATH_LIBRARY_NAME, MathInterfaceLibrary.class); double cos(double x); } public static void main(String[] args) { System.out.println(MathLibrary.cos(0.6)+" "+MathInterfaceLibrary.instance.cos(0.6)); } }
【参考链接】:
https://github.com/twall/jna/blob/master/www/DirectMapping.md
下面给出一个调用本地数学函数库的示例,该示例中分别调用了动态库中的cos、sin和pow进行数学计算。
发表评论
-
【转】Django resources
2014-01-23 14:35 10827Django resources This page li ... -
使用国内镜像源来加速python pypi包的安装
2014-01-16 11:16 197842pipy国内镜像目前有: http://pypi.d ... -
[转 ]vagrant使用简介
2014-01-10 13:53 257501> 简介: vagrant提供了易于配置,重复性 ... -
[转]在Java中调用Python
2014-01-07 13:08 9219在执行之前都需要把jython对应的包加载进去,这个是必须的 ... -
[转]Eclipse配置PyDev插件
2014-01-02 14:25 2839安装python解释器 安装PyDev: 首 ... -
RestFuse的研究(五) Http请求的封装
2014-06-14 15:50 3647在RestFuse中封装了Http请 ... -
RestFuse的研究(四) Junit的Statement的分析
2013-12-06 11:46 1673在RestFuse提供了多种单 ... -
RestFuse的研究(三) Junit的Rule的使用和分析
2013-12-06 11:01 2238在junit中定义一些可以公用的规则(R ... -
RestFuse的研究(二) Junit的Runner的分类和模式
2013-12-06 10:40 1604在Junit4中的调用JunitCore可以采 ... -
RestFuse的研究(一) HttpJunitRunner的实现
2013-12-06 10:11 1747在RestFuse是一种针对Rest We ... -
[转]An open-source JUnit extension to test HTTP/REST APIs
2013-12-06 09:57 1100http://developer.eclipsesource ... -
TestNG简单的学习(十三)TestNG中Junit的实现
2013-12-04 09:00 3355TestNG和junit的整合 ... -
TestNG简单的学习(十二)TestNG运行
2013-12-03 09:08 51587文档来自官方地址: ... -
TestNG简单的学习(十一)TestNG学习总结
2013-12-03 09:08 14198最近一直在学习关于TestNG方面的知识,根 ... -
TestNG简单的学习(十)TestNG @Listeners 的使用
2013-12-03 09:07 8694TestNG官方网站: http://testng.or ... -
TestNG简单的学习(九)TestNG Method Interceptors 的使用
2013-12-03 09:07 2714TestNG官方网站: http://testng ... -
TestNG简单的学习(八)TestNG Annotation Transformers 的使用
2013-12-03 09:07 2810TestNG官方网站: http://testng.or ... -
TestNG简单的学习(七)TestNG编程方式运行
2013-12-02 09:22 2454TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2784TestNG官方网站: http://testng.or ... -
TestNG简单的学习(五)参数化测试数据的定制
2013-12-02 09:22 2702TestNG官方网站: http://testng.or ...
相关推荐
在Java编程环境中,JNA提供了一种无需编写JNI(Java Native Interface)代码就能直接调用本地操作系统API和其他C库函数的方式。 首先,让我们深入了解JNA。JNA是一种开源库,允许Java程序与本地平台API进行交互。它...
例如,如果你需要调用Windows API中的某个函数,你可以创建一个接口,然后通过JNA的Platform类加载相应的库,并实例化该接口,就可以直接调用本地函数了。 使用JNA,你可以执行以下操作: 1. 调用操作系统API:比如...
JNA(Java Native Access)是一个开源的Java框架,它构建在经典的JNI之上,旨在简化Java调用原生函数的过程。JNA通过动态创建一个C语言编写的转发器,自动实现Java和C的数据类型映射,从而免去了编写和维护动态链接...
JNA平台库提供了大量的结构体、枚举类型和函数接口,使得开发者能够方便地访问操作系统底层的服务,例如文件系统操作、进程管理、网络编程、图形界面交互等。通过这个库,开发者可以避免繁琐的JNI编码工作,直接在...
在Java编程中,直接调用操作系统底层的动态链接库(DLL)是相对复杂的一件事情,因为Java是一种跨平台的语言,而DLL通常与特定的操作系统紧密关联。为了在Java中实现这一功能,Java Native Access(JNA)应运而生。...
综上所述,`jna-3.3.0.jar`和`jna-3.3.0-platform.jar`是Java开发中调用本地资源的重要工具,它们提供了一种简便的方式让Java程序能够直接利用操作系统的能力,而无需深入学习C/C++编程。通过理解JNA的工作原理和...
JNA的核心在于其映射机制,它通过定义一个Java接口,该接口中的方法对应于C函数,然后通过JNA的库映射加载这个接口,使得Java可以直接调用本机库的函数。JNA的这种设计大大简化了Java与本机库交互的过程,降低了开发...
JNA允许你直接以相同的数据类型定义函数,如`int function1(int a, float b, long c)`。这样,Java中的参数将直接映射到C函数的相应参数。 2. **模拟C语言数组**: C语言中,函数可能接受字符数组,如`char *data`...
JNA库本身包含了基本的映射功能,而`jna-platform`是JNA的一个扩展库,包含了大量常见操作系统的结构体、类型和函数映射,如Windows API、Unix/Linux系统调用等。这两个库结合使用,可以让Java开发者更方便地跨平台...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需编写C/C++的桥接代码。JNA通过映射Java接口到本地函数来实现这一点,使得Java开发者可以方便地与本地...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需编写C/C++的中间层,极大地简化了Java与本地操作系统接口的交互。JNA 3.2.1是该库的一个版本,提供了对...
1. **JNA映射机制**:JNA的核心是通过定义Java接口来映射本地函数。这个接口使用特殊的注解,比如`@StandardFunction`或`@Native`,来指示JNA如何调用对应的本地函数。 2. **类型映射**:JNA自动处理Java类型到本地...
JNA通过一种映射机制,将Java方法与C函数对应起来,这样在Java代码中调用Java方法时,实际上会触发对底层C函数的调用。这一特性极大地简化了跨平台的本地系统调用,减少了对JNI的依赖。 JNA的工作原理是基于一个...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需编写C/C++的中间层,如JNI(Java Native Interface)。JNA通过提供一种抽象的方式来映射Java方法到本地...
JNA通过提供一种高级映射,使得Java程序员能够轻松地访问本机函数,大大简化了跨平台的系统级编程。在“jna4.4.0+jna-platform4.4.0+JNative.zip”这个压缩包中,包含了JNA库的两个主要组件以及一个名为JNative的...
而`jna-platform.jar`则包含了许多常见的操作系统平台API的预定义映射,如Windows API、Unix系统调用等,使得开发者可以直接使用这些API,而无需手动配置。 描述中提到的"JNA jar包 jna.jar platform.jar",这里的`...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需编写C/C++的中间层,如JNI(Java Native Interface)。JNA通过提供一种抽象的方式来映射原生函数,使得...
通过这个JNA实例,我们可以看到Java程序是如何利用JNA库来调用C语言编写的函数和处理结构体数据的。这种技术不仅简化了跨语言编程的过程,还提高了代码的可维护性和扩展性。对于需要与现有C/C++代码集成的项目来说,...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码与本地操作系统 API 直接交互,而无需编写任何本地代码(如C/C++)。JNA 提供了一种方便、高效的桥接机制,使得 Java 开发者能够轻松访问系统...
JNA通过映射本地函数到Java方法来实现调用。它有一个内存管理机制,可以自动转换Java数据类型到本地平台的数据类型,并处理回调函数。JNA的核心概念包括接口映射、类型映射和指针管理。 2. **使用JNA的步骤**: -...