|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。
J/Direct是挪用Win32DLL函数最复杂的体例。它的次要计划方针是与Win32API打交道,但完整可用它挪用其他任何API。可是,只管这一特征十分便利,但它同时也形成了某些限定,且下降了功能(与RNI比拟)。但J/Direct也有一些分明的长处。起首,除但愿挪用的谁人DLL里的代码以外,没有需要再编写分外的非Java代码,换言之,我们不必要一个封装器大概代办署理/存根DLL。其次,函数自变量与尺度数据范例之间完成了主动转换。若必需传送用户自界说的数据范例,那末J/Direct大概不按我们的但愿事情。第三,就象下例展现的那样,它十分复杂和间接。只需多数几行,这个例子便能挪用Win32API函数MessageBox(),它能弹出一个小的模态窗口,并带有一个题目、一条动静、一个可选的图标和几个按钮。- publicclassShowMsgBox{
- publicstaticvoidmain(Stringargs[])
- throwsUnsatisfiedLinkError{
- MessageBox(0,
- "CreatedbytheMessageBox()Win32func",
- "ThinkinginJava",0);
- }
- /**@dll.import("USER32")*/
- privatestaticnativeint
- MessageBox(inthwndOwner,Stringtext,
- Stringtitle,intfuStyle);
- }
复制代码
使人震动的是,这里即是我们使用J/Direct挪用Win32DLL函数所需的全体代码。个中的关头是位于树模代码底部的MessageBox()声明之前的@dll.import引诱命令。它外表上看是一条正文,但实践并不是云云。它的感化是告知编译器:引诱命令上面的函数是在USER32DLL里完成的,并且应响应地挪用。我们要做的全体事变就是供应与DLL内完成的函数符合的一个原型,并挪用函数。可是毋需在Java版本内行工键进必要的每个Win32API函数,一个MicrosoftJava包会帮我们做这件事变(很快就会具体注释)。为了让这个例子一般事情,函数必需“按称号”由DLL导出。可是,也能够用@dll.import引诱命令“按按次”链接。举个例子来讲,我们可指定函数在DLL里的出口地位。稍后还会详细报告@dll.import引诱命令的特征。
用非Java代码举行链接的一个主要成绩就是函数参数的主动设置。正如人人看到的那样,MessageBox()的Java声明接纳了两个字串自变量,但本来的C计划则接纳了两个char指针。编译器会匡助我们主动转换尺度数据范例,同时依照本章后一节要报告的划定规矩。
最好,人人也许已注重到了main()声明中的UnsatisfiedLinkError非常。在运转期的时分,一旦链接程序不克不及从非Java函数里剖析出标记,就会触发这一非常(事务)。这多是由多方面的缘故原由酿成的:.dll文件未找到;不是一个无效的DLL;大概J/Direct未获您所利用的假造机的撑持。为了使DLL能被找到,它必需位于Windows或WindowsSystem目次下,位于由PATH情况变量列出的一个目次中,大概位于和.class文件不异的目次。J/Direct取得了MicrosoftJava编译器1.02.4213版本及更高版本的撑持,也取得了MicrosoftJVM4.79.2164及更高版本的撑持。为懂得本人编译器的版本号,请在命令行下运转JVC,不要加任何参数。为懂得JVM的版本号,请找到msjava.dll的图标,并使用右键弹出菜单察看它的属性。
轮性能微软曾做过一个例子,就是同一个项目用java和.net网页编程来作,结果开发周期,.net网页编程是java的一半,性能java是.net网页编程的十分之一,代码量java是.net网页编程的三倍。呵呵,这说明了什么,.net网页编程的全方位比java好。但是有的人说.net网页编程不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net网页编程很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net网页编程,只是推出了跨语言的.net网页编程, |
|