返回介绍

A.3.2 com.ms.win32 包

发布于 2024-10-15 23:56:37 字数 1149 浏览 0 评论 0 收藏 0

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 包的开发仍未正式完成,但已可堪使用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文