Win32 API的体积相当复杂——包括了数以千计的函数、常数以及数据范例。虽然,我们并不想将每个Win32 API函数都写成对应Java形式。微软思量到了这个问题,刊行了一个Java包,可通过J/Direct将Win32 API映射成Java类。这个包的名字叫作com.ms.win32。安装Java SDK 2.0时,若在安装选项中举办了相应的配置,这个包就会安装到我们的类路径中。这个包由大量Java类组成,它们完整再现了Win32 API的常数、数据范例以及函数。海涵本领最大的三个类是User32.class,Kernel.class以及Gdi32.class。它们包括的是Win32 API的焦点内容。为利用它们,只需在本身的Java代码里导入即可。前面的ShowMsgBox示例可用com.ms.win32改写成下面这个样子(这里也思量到了用更得当的方法利用UnsatisfiedLinkError):
import com.ms.win32.*; public class UseWin32Package { public static void main(String args[]) { try { User32.MessageBeep( winm.MB_ICONEXCLAMATION); User32.MessageBox(0, "Created by the MessageBox() Win32 func", "Thinking in Java", winm.MB_OKCANCEL | winm.MB_ICONEXCLAMATION); } catch(UnsatisfiedLinkError e) { System.out.println("Can’t link Win32 API"); System.out.println(e); } } }
Java包是在第一行导入的。此刻,可在不举办其他声明的前提下挪用MessageBeep()和MessageBox()函数。在MessageBeep()里,我们可看到包导入时也声明白Win32常数。这些常数是在大量Java接口里界说的,全部定名为winx(x代表欲利用之常数的首字母)。
写作本书时,com.ms.win32包的开拓仍未正式完成,但已可堪利用。