32位COM DLL我有以下配置:連接64位的Java使用Com4j或雅各
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
我搜索#2 /谷歌的exceptin,我也做了以下內容:
1)同時使用Sys64WOW/regsvr32.exe的和System32註冊的應用程序的DLL /的regsvr32.exe
2)註冊同時使用Sys64WOW/REGSVR32.EXE和System32/REGSVR32.EXE
3)複製在Sys64WOW和System32下文件夾的DLL的com4j DLL(32位和64位)。
我已經完成了上述所有單獨檢查所有可能的組合。使用64位Java的上述錯誤仍然存在。
我嘗試過使用另一座橋(雅各布)。在32位Java上它成功了,在64位Java上它失敗了。
我有一個問題,有人可能知道:有沒有什麼辦法可以連接一個應用程序,據我所知,只提供一個Win32 COM dll [1],使用任何可用的Java/COM網橋和Java 64bit?或者只是32位COM + 64位Java不可連接?
[1]:我查了OLE/COM查看器和類型庫有下只有一個條目「0的Win32 =,所以我暗示,這意味着沒有Win64的COM DLL,右
感謝您的回覆。我做了這些「作爲一個快速入門,您可以將您的CoClass標記爲缺省dllhost.exe代理過程的候選對象:OLE/COM對象查看器(x86)>所有對象> [您的CoClass]>實施>使用代理過程路徑爲空)「。但仍然是同樣的錯誤。我勾選使用代理過程框,但是當我導航到另一個CoClass,然後返回到我的CoClass時,該框未被選中。有沒有可能我的選擇沒有保存? – Thanos
你是否以管理員身份運行oleview?它需要各自的權限才能寫入註冊表。您可以通過切換到CoClass的「註冊表」選項卡來驗證設置是否已正確保存。在AppID節點下應該有一個[DllSurrogate]條目。 – Aurora
好吧,我必須以管理員身份運行。現在它被保存下來並且可以在64位Java上運行。非常感謝你。你的幫助真的很感激。 – Thanos