我有以下配置:
1) Windows 10 64 位
2) 只有 32 位版本且可通过 COM 获得的应用程序。
我使用 tlbimb.jar 访问 32 位应用程序的 .dll 文件以生成所需的接口,我成功了。
场景 1:我尝试使用 Java 8 32 位安装访问 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 上搜索了异常,我做了以下事情:
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 的上述错误仍然存在。
我尝试过使用另一座桥(Jacob)。在 32 位 Java 上成功,在 64 位 Java 上失败。
我有一个问题要问可能知道的人:有什么方法可以连接一个应用程序,据我所知,它只提供一个Win32 COM dll [1],使用任何可用的 Java/COM 桥和Java 64 位?或者只是无法连接 32 位 COM + 64 位 Java?
[1]:我检查了 OLE/COM 查看器,在类型库下只有一个条目 "0 Win32 = ,所以我暗示这意味着没有 Win64 COM dll,对吧?