0

我有一个用 VB6 开发的 COM+ 组件。

将它注册到组件服务管理器 COM+ 应用程序后,我可以像这样从 ASP 使用它

Set Comando = Server.CreateObject("JuiciosComando.clsComando")
ComandoExecute = Comando.execute(Xml)
Set Comando = Nothing

这就是我所需要的,组件只接收一个(可能是巨大的)字符串并返回另一个(也可能是巨大的)字符串......

有什么方法可以从 Java 访问这个相同的组件吗?

到目前为止,我发现的是J-Integra,但它是一种商业产品。

我也在codeguru.com 上找到了这个线程,但我的 C++.NET 知识相当贫乏,此外我宁愿找到一个免费的纯 Java 解决方案。

4

5 回答 5

5

正如 Eddie 所提到的,您有两种通过 java 使用 COM 的主要方法:使用 C++ 和编写 JNI 包装器或使用第三方 JAR 来包装 COM 对象。

过去我曾尝试使用 C++ 来包装 COM 对象——它不适合胆小的人——这并不容易,而且很容易泄漏资源。

我还使用了两个第三方 JAR:ComfyJ 和 JACOB。

ComfyJ 非常易于使用,并且还包含一个 codegen 实用程序来为您的 COM 类生成 java 包装类。

它可以通过http://www.teamdev.com/comfyj/index.jsf下载和试用

(我与 TeamDev 没有任何关系!)

如果您迫切需要完全免费的解决方案,您也可以尝试 JACOB ( http://sourceforge.net/projects/jacob-project/ )。

我在文档方面遇到了问题,但它相对稳定。

于 2009-01-29T17:32:32.440 回答
4

我可以确认JACOB工作得很好。我已经将它用于许多 COM 自动化项目,没有任何问题。而且是免费的...

于 2009-01-30T11:08:22.213 回答
2

我曾经使用过一个应用程序,该应用程序最初尝试使用 JNI 与本机代码交互以访问 COM,但它最终变得非常难以维护和调试。(幸运的是,我不是处理应用程序那部分的人!)由于这次经历,我现在建议需要访问 COM 的 Java 代码通过编写 C# 应用程序来进行 COM 访问,并使用两个应用程序之间的固定插座。

与 C# 中的等效项相比,Java 中的 JNI 具有不必要的风险和困难,因此从 Java 中执行此操作的最稳定方法是不从 Java 中执行此操作。将 COM 访问权委托给具有 COM 访问权的专业知识:C#。

您的另一种选择是许可一些本身为您管理 JNI 的第三方库。但除非您享受痛苦,否则我强烈建议您不要推出自己的 JNI 解决方案。

稍后添加:正如您在引用的链接中看到的,JNI 代码可能会使整个 JVM 崩溃。至少如果 COM 访问位于套接字的另一端,如果 C# 应用程序崩溃,您只会丢失您的套接字,当 C# 应用程序返回时您可以轻松地重新建立。但是,C#在访问 COM 时崩溃的可能性要小得多是的,拥有一个纯 100% Java 解决方案会更好,但有时将任务委托给另一种语言确实要好得多。

于 2009-01-29T17:11:30.267 回答
1

也许你应该试试 com4j,它对我很有用,而且还支持 com 事件。你可以在这里找到它:https ://com4j.dev.java.net/

于 2009-05-30T12:26:19.483 回答
0

抱歉,我知道这个线程很旧,但 j-Interop 可以帮助你。

j-interop.org网站:

“j-Interop 是一个 Java 开源库(在 LGPL 下),它实现了 DCOM 有线协议 (MSRPC),以支持开发可以与任何 COM 组件互操作的纯、双向、非本地 Java 应用程序。”

干杯,马特

于 2009-05-30T02:26:48.650 回答