我有一个 Java 程序,我想从我的 Win32 应用程序发送一个命令。通常我会使用 WM_COPYDATA
但我对 Java 有哪些选择?
最佳答案
有一些方法可以在 Java 和 Windows 之间进行互操作。按功率和难度排序:
- 要处理窗口消息,您可以使用 Jawin - 它甚至具有 demo of how to handle window messages - 或类似的东西。当然,如果你将你的 Java 程序绑定(bind)到像 Jawin 这样的库,它永远不会在非 Windows 机器上运行
- 对于 Win32 和 Java 之间的简单交互,我最喜欢的选择是绑定(bind)到只在本地主机上监听的套接字。该协议(protocol)可能很简单,但我更喜欢纯文本协议(protocol)以便于调试。请注意,如果用户终止程序,套接字连接可能会中断。
- 您可以使用(本地)网络服务,就像此处其他帖子中所建议的那样。双方都确保使用 Web 服务/XML 库来构造和解析消息,如果进行字符串连接,很容易构造格式错误的 XML。
- 您可以将 Windows 程序的功能放入 COM 组件并使用 Java 到 COM 的桥梁:Jacob 或 j-Interop 是流行的免费库,j-Integra 似乎是使用遗留系统的企业的流行选择.
- 您可以将 Java 程序的功能放入 COM 组件中并使用 Sun 的 Java-ActiveX 桥。根据我的个人经验,这是一个相当尴尬的选择:Java-ActiveX 桥的开发自 1.4 以来就停滞不前,ActiveX 的安装导致您的 Java 组件安装在 JRE 目录中的某个位置并在 ActiveX 容器中调试您的 Java 组件比较麻烦。
旁注:如果您在两端都处理字符串,请始终考虑到 Java 将字符串作为与字节数组完全不同的方式处理。特别是如果您使用的是 Windows ANSI 字符串,请注意字符 81、8D、8F、90 和 9D 在 Windows-1252 代码页中被指定为未定义,因此如果您的 Windows 字符串包含这些元素,Java 将产生问号或异常。因此,如果可能的话,请在 Windows 端使用 WChar 字符串或限制您使用安全字符。
关于java - 如何向正在运行的 Java 程序发送命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042705/