JACOB - 远程调度COM接口调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JACOB - 远程调度COM接口调用相关的知识,希望对你有一定的参考价值。

我正在使用JACOB将消息写入COM接口。

Dispatch dispatch = new Dispatch("<Interface Name>");
Variant response = Dispatch.call(dispatch, <DISPID>, message);

这在localhost上完美运行。但是如何使用JACOB api来调用某些其他机器/ IP地址上的接口

答案

JACOB似乎无法远程访问(DCOM调用)。

JACOB Project mailing-list FAQ

我可以跨机器或操作系统调用COM组件吗? 这个问题的答案是否定的。实现jacob的方式是使用JNI和为windows平台设计的c ++ DLL。 COM是Microsoft定义的二进制标准,因为它尚未移植到任何其他平台(据我所知)。 Jacob只是COM的一个java桥,它定义了组件在同一台机器上时如何相互通信。 DCOM标准定义了组件如何跨网络进行通信,但Jacob不支持DCOM。

解决方案:

  • 像J-Integra这样的商业产品原生支持DCOM协议。
  • 使用RMI。为Jacob类创建一个包装器,然后RMI确认它。它实际上是有效的,但雅各布的主角并不想让类实现可序列化,使得整个操作稍微困难一些。
  • 使用Web服务。公开你想要的东西作为Web服务,并在Java端使用SOAP和零食来访问它。

或者,如果本地工作的COM对象在内部支持远程访问,则可能很有用。

看来如下文。

Jacob connect to Remote Computer for WMI support

ADODB Recordset Example

The JACOB Project: A JAva-COM Bridge

下载 JACOB二进制发行版(jacobBin_XX.zip)包括:

  1. jacob.jar:必须添加到CLASSPATH的java类的JAR文件。包名用com.jacob替换com.ms(例如com.ms.com.Variant映射到com.jacob.com.Variant。
  2. jacob.dll:一个小的Win32 DLL,你必须添加到你的PATH。
  3. 示例:以Java源代码和编译形式提供,以演示产品的各种功能。特别是,Microsoft®ADO的一组包装类作为样本提供。

源代码在JACOB源代码发行版(jacobSrc_XX.zip)中提供,其中包括Java和C ++代码。源代码分发是二进制分配的超集,因此您不需要两者。


其他人似乎有其他库,而不是JACOB。

A pure Java DCOM Bridge with j-interop

j-interop/j-interop/src/readme.htm


此外:

同样,它不能在通过LAN连接的计算机之间调用。

此外,无法使用VC ++或.NET语言远程调用本地COM对象。

解决方法是创建一个代理应用程序来调用远程计算机上的本地COM对象。

任意设计主应用程序和代理应用程序,以便它们可以使用套接字或其他方式相互通信。

以上是关于JACOB - 远程调度COM接口调用的主要内容,如果未能解决你的问题,请参考以下文章

使用jacob调用Windows的com对象,转换Office文件为pdfhtml等

java调用jacob组件出现的问题。

[原创]java导出word的5种方式

Java jacob调用打印机打印word文档

Jacob用法收集

使用jacob写MS Project