У меня такая конфигурация:
1) Windows 10 64-битная
2) Приложение, имеющее только 32-битную версию и доступное через COM.
Я обращаюсь к файлу .dll 32-разрядного приложения с помощью tlbimb.jar для создания необходимых интерфейсов, и мне это удается.
Сценарий 1. Я пытаюсь получить доступ к 32-разрядному приложению с помощью установки Java 8 32-разрядной. Я могу вызвать методы через COM успешно без каких-либо проблем.
Сценарий 2: я пытаюсь получить доступ к 32-разрядному приложению, используя 64-разрядную установку Java 8. Я получаю сообщение об ошибке:
Exception in thread "main" com4j.ExecutionException: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153
Я искал исключение в Stackoverflow / Google и сделал следующее:
1) Зарегистрировал dll приложения, используя как Sys64WOW / regsvr32.exe, так и System32 / regsvr32.exe
2) Зарегистрировал dll com4j (32- и 64-разрядный), используя как Sys64WOW / regsvr32.exe, так и System32 / regsvr32.exe
3) Скопировал dll в папки Sys64WOW и System32.
Все вышесказанное я проделал отдельно, проверив все возможные комбинации. Упомянутая ошибка при использовании 64-битной Java все еще существует.
Я пробовал использовать другой мост (Джейкоб). На 32-битной Java это удается, на 64-битной Java - нет.
У меня есть вопрос к тому, кто может знать: есть ли способ подключить приложение, которое, насколько я могу судить, предлагает только Win32 COM dll [1], используя любую из доступных Java / COM-мосты и 64-битная Java? Или просто 32-битный COM + 64-битный Java не подключаются?
[1]: Я проверил OLE / COM Viewer и в библиотеке типов есть только одна запись "0 Win32 =", поэтому я имел в виду, что это означает, что нет Win64 COM dll, верно?