- 5
- 0
- 约 16页
- 2016-12-31 发布于北京
- 举报
开源项目
用更容易的方法来调用本地代码
By Jeff Friesen, JavaW, 02/05/08
?
如果在Java程序中你使用Java Native Interface(JNI) 来调用某个特定平台下的本地库文件,你就会发现这个过程很单调、乏味。Jeff Friesen一直在介绍一个知名度很低的Java开源项目:Java Native Access---它能够避免因使用JNI导致的错误和乏味,同时它还能让你通过编程的方式调用C语言库。
?
?????? 在Java语言没有提供必要的APIs的情况下,Java程序使用Java Native Interface (JNI)来调用特定平台下的本地库是必要的。例如:在Windows XP平台中,我使用过JNI来调用通用串行总线和基于TWAIN的扫描仪器的库;在更古老的Windows NT平台中,调用过智能卡的库。
?
?????? 我按照一个基本的、乏味的流程来解决这些问题:首先,我创建一个Java类用来载入JNI-friendly库(这个库能够访问其他的库)并且声明这个类的本地方法。然后,在使用JDK中的javah工具为JNI-friendly库中的函数---函数和这个类中的本地方法一一对应---创建一个代理。最后,我使用C语言写了一个库并用C编译器编译了这些代码。
?
?????? 尽管完成这些流程并不是很困难,但是写C代码是一个很缓慢的过程---例如: C语言中的字符串处理是通过指针来实现的,这会很复杂的。而且,使用JNI很容易出现错误,导致内存泄漏、很难找到程序崩溃的原因。
?
?????? 在Java开源系列的第二篇文章中,我要介绍一个更简单、更安全的解决方法:Todd Fast and Timothy Wall的Java Native Access (JNA) 项目。JNA能够让你在Java程序中调用本地方法时避免使用C和Java Native Interface。在这篇文章中,让我以简要的介绍?????? JNA和运行示例必需的软件来开始下面的内容。然后,向你展示如何使用JNA将3个Windows本地库中的有用代码移植到Java程序中。
?
Get started with JNA(JNA入门)Java Native Access 项目 在J上,你可以到这个网站上现在这个项目的代码和在线帮助文档。虽然在下载有5个相关的jar文件,在本文中你仅仅需要下载其中的jna.jar和example.jar。
?
Jna.jar提供基本的、运行这些示例文件必需的jna运行环境。这个jna.jar文件除了有Unix、Linux、Windows和Mac OS X平台相关的JNT-friendly本地库外,还包含其他几个类包。每一个本地库都是用来访问相对应平台下的本地方法的。
?
?????? example.jar包含了不同的示例来表明JNA的用途。其中的一个例子是使用JNA来实现一个在不同平台下的透明视窗技术的API。在文章最后的示例中将要展示如何使用这个API修复上个月的文章关于VerifyAge2应用中辨认透明效果的问题。
?
获取本地时间(Get local time)?
如果你在Java Native Access 首页 看过“JNA如何入门”,你就会知道一个很简单的关于调用Windows 平台下的API函数:GetSystemTime() 的JNA示例。这个不完整的例子只是展示了JNA的基本特点。(在例子的基础上,我做了一个更完整的基于Windows的例子来介绍JNA)我在Windows平台下完善了这个例子来介绍JNA。
?
第一例子基于Windows GetLocalTime() API函数返回本地当前的时间和日期。和GetSystemTime()不同的是,返回的时间/日期是协调通用时间(UTC)格式的,GetLocalTime()返回的时间/日期信息的格式是根据当前时区来表示。
?
在一个Java程序中使用JNA调用GetLocalTime,你需要知道这个函数所在的Windows平台下的动态链接库(DLL)的名称(和可能所在的地理区域)。我们发现GetLocalTime()和GetSystemTime在同一个DLL文件中:kernel32.dll。你还需要知道GetLocalTime()在C语言环境中的申明。申明如下Listing 1:
Listing 1. GetLocalTime在C语言中的申明typedef struct{?? WORD wYear;?? WORD wMonth;?? WORD wDayOfWeek;?? WORD wDay;?? WORD wHour;?? WORD wMinute;?? WORD wSecond;?? WORD wMilli
您可能关注的文档
最近下载
- 《基于西门子s7-1200PLC的变频调速电梯电气控制系统设计》14000字.docx VIP
- 《智能光电系统设计》课件——光学系统设计实例.pptx VIP
- 沪教版初中英语单词表(七年级至九年级全6册).docx VIP
- 吉林省肉牛产业发展的多维剖析与破局之道.docx VIP
- NCCN临床实践指南:软组织肉瘤(2026.v1)PPT课件.pptx VIP
- DB21_T 2973-2018小型水利工程混凝土施工质量管理规程.pdf VIP
- 数字金融对制造业企业绿色技术创新的影响研究.pptx VIP
- 2019-2020中国传媒大学电影学考研真题、考研参考书、复试线、招生人数.pdf VIP
- 大型水库清淤施工组织设计.docx VIP
- 金坑水库清淤工程勘察设计招标公告.DOC VIP
原创力文档

文档评论(0)