日期:2011-03-22 16:17:00 来源:本站整理
J/Direct[Java编程]
本文“J/Direct[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
J/Direct是调用Win32 DLL函数最简单的方法.它的主要计划目标是与Win32API打交道,但完好可用它调用其他任何API.但是,固然这一特点非常便利,但它同时也造成了某些限制,且降低了性能(与RNI相比).但J/Direct也有一些明显的长处.首先,除但愿调用的那个DLL里的代码之外,没有必要再编写额外的非Java代码,换言之,我们不需求一个封装器大概代理/存根DLL.其次,函数自变量与尺度数据范例之间实现了自动转换.若必须传送用户自定义的数据范例,那么J/Direct大概不按我们的但愿工作.第三,就象下例展示的那样,它非常简单和直接.只需少数几行,这个例子便能调用Win32 API函数MessageBox(),它能弹出一个小的模态窗口,并带有一个标题、一条消息、一个可选的图标以及几个按钮.
令人震惊的是,这里就是我们操纵J/Direct调用Win32 DLL函数所需的全部代码.此中的关键是位于示范代码底部的MessageBox()声明之前的@dll.import指导号令.它表面上看是一条注释,但实际并非如此.它的作用是奉告编译器:指导号令下面的函数是在USER32 DLL里实现的,并且应呼应地调用.我们要做的全部事情就是供应与DLL内实现的函数符合的一个原型,并调用函数.但是毋需在Java版本里手工键入需求的每一个Win32 API函数,一个Microsoft Java包会帮我们做这件事情(很快就会具体注释).为了让这个例子正常工作,函数必须“按名称”由DLL导出.但是,也可以用@dll.import指导号令“按次序”链接.举个例子来说,我们可指定函数在DLL里的进口位置.稍后还会具体报告@dll.import指导号令的特点.public class ShowMsgBox { public static void main(String args[]) throws UnsatisfiedLinkError { MessageBox(0, "Created by the MessageBox() Win32 func", "Thinking in Java", 0); } /** @dll.import("USER32") */ private static native int MessageBox(int hwndOwner, String text, String title, int fuStyle); }
用非Java代码举行链接的一个重要问题就是函数参数的自动配置.正如大家看到的那样,MessageBox()的Java声明采取了两个字串自变量,但本来的C筹划则采取了两个char指针.编译器会帮忙我们自动转换尺度数据范例,同时遵循本章后一节要报告的法则.
最好,大家大概已注意到了main()声明中的UnsatisfiedLinkError非常.在运行期的时刻,一旦链接程序不能从非Java函数里解析出标记,就会触发这一非常(事件).这大概是由多方面的缘由造成的:.dll文件未找到;不是一个有效的DLL;大概J/Direct未获您所利用的虚拟机的支持.为了使DLL能被找到,它必须位于Windows或Windows\System目录下,位于由PATH环境变量列出的一个目录中,大概位于和.class文件相同的目录.J/Direct得到了Microsoft Java编译器1.02.4213版本及更高版本的支持,也得到了Microsoft JVM 4.79.2164及更高版本的支持.为理解自己编译器的版本号,请在号令行下运行JVC,不要加任何参数.为理解JVM的版本号,请找到msjava.dll的图标,并操纵右键弹出菜单察看它的属性.
以上是“J/Direct[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:操纵现成代码
- ·下一篇文章:构建器内部的多形性办法的行为
- ·中查找“J/Direct”更多相关内容
- ·中查找“J/Direct”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论