如何使用免费方法从Java执行COM +库

时间:2009-01-29 16:12:49

标签: java com+

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

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

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

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

有没有办法从Java访问这个相同的组件?

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

我也发现this thread on codeguru.com但我的C ++ .NET知识相当差,而且我宁愿找到一个免费的纯Java解决方案。

5 个答案:

答案 0 :(得分: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/)。

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

我使用的应用程序最初尝试使用JNI与本机代码进行交互以访问COM,但最终维护和调试非常困难。 (幸运的是,我不是应用程序的那部分工作人员!)由于这种经验,我现在建议需要访问COM的Java代码通过编写C#应用程序来进行COM访问,并使用两个应用程序之间的套接字。

与在C#中的等价物相比,JNI在Java中具有不必要的风险和困难,因此从Java执行此操作的最稳定方法是不使用Java。委托COM访问具有COM访问专业知识的东西:C#。

您的另一种选择是为您自己管理JNI的第三方库授权。但除非你喜欢痛苦,否则我强烈建议你不要使用自己的JNI解决方案。

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

答案 3 :(得分:1)

也许你应该尝试com4j,它对我很有用,也支持com事件。您可以在此处找到它:https://com4j.dev.java.net/

答案 4 :(得分:0)

抱歉,我知道这个帖子已经过时了,但j-Interop可以帮助你。

来自 j-interop.org 网站:

  

“j-Interop是Java开源   实现的库(在LGPL下)   DCOM有线协议(MSRPC)来   使Pure的发展,   双向非本地Java   可以互操作的应用程序   任何COM组件。“

干杯, 马特