使用Com4j或Jacob将64位Java与32位COM dll连接

我有以下配置:

1)Windows 10 64位

2)只有32位版本的应用程序可通过COM获得。

我使用tlbimb.jar访问32位应用程序的.dll文件,以生成所需的接口,然后成功。

方案1:我尝试使用Java 8 安装访问32位应用程序。我可以 通过COM 调用这些方法。

方案2:我尝试使用Java 8 64位安装访问32位应用程序。我收到一条错误消息:

Exception in thread "main" com4j.ExecutionException: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153

我在Stackoverflow / Google上搜索了exceptin,并完成了以下操作:

1)使用Sys64WOW / regsvr32.exe和System32 / regsvr32.exe注册应用程序的dll

2)同时使用Sys64WOW / regsvr32.exe和System32 / regsvr32.exe注册com4j dll(32位和64位)

3)复制Sys64WOW和System32文件夹中的dll。

我单独完成了以上所有操作,并检查了所有可能的组合。使用64位Java的上述错误仍然存​​在。

我尝试使用另一座桥(雅各布)。在32位Java上成功,在64位Java上失败。

我对一个可能知道的人有一个疑问:据我所知,是否有任何方法可以使用任何可用的Java / COM桥和 [1]的应用程序?还是仅仅是32位COM + 64位Java无法连接? *

[1]:我检查了OLE / COM Viewer,并且在类型库下只有一个条目“ 0 Win32 =,所以我暗示这意味着没有Win64 COM dll,对吗?

回答:

这将不起作用,因为您的客户端进程和COM

DLL的位数不匹配。尝试创建新实例时,请CoCreateInstance尝试在注册表的64位配置单元中查找相关的类信息。之所以失败,是因为它实际上位于您注册DLL的32位配置单元中。

为了解决这个问题,您可以选择使用替代过程,该过程使您的CoClass可以在不同的本机过程中实例化。然后,您的客户可以通过IPC与代理进行通信(有关更多信息,请参见此处)。

作为快速入门,您可以将CoClass标记为默认dllhost.exe代理过程的候选者:OLE / COM对象查看器(x86)为Admin>所有对象>

[您的CoClass]>实现>使用代理过程(将路径保留为空)。

如果您打算分发您的应用程序,则可以将此信息放在REG脚本中或将DLL导入COM +服务器应用程序。

以上是 使用Com4j或Jacob将64位Java与32位COM dll连接 的全部内容, 来源链接: utcz.com/qa/416114.html

回到顶部