Доступ к .tlb из JAVA

В настоящее время пытаясь получить доступ к файлу библиотеки типов из JAVA, я пробовал следующее с соответствующими ошибками:

1- Com2Java: я получаю эту ошибку каждый раз, когда пытаюсь подключиться к своему приложению:

Минидампы не включены по умолчанию в клиентских версиях Windows

2- Com4j: он создает только интерфейсы и не может понять, как их использовать (я не могу найти никаких классов, только интерфейсы)

3- После небольшого поиска узнал о Visual J++, но не смог его скачать, потому что он был снят с производства.

Может ли кто-нибудь дать совет?

Спасибо


person Peter    schedule 05.10.2016    source источник


Ответы (1)


Я раньше не использовал Com2Java или Com4j, но давным-давно использовал библиотеку под названием JavaCOMBridge (https://sourceforge.net/projects/jacob-project/).

Версия JavaCOMBridge, которую я использовал, не поддерживает множественное наследование, и я не вижу, как это можно сделать.

Забудьте о Visual J++. Это мерзость, созданная Microsoft и преданная забвению.

Если у вас есть опыт работы как с C, так и с Java, а количество API-интерфейсов, которые вам нужно связать, невелико, я бы рекомендовал использовать JNI напрямую.

Изменить Вот пример использования Excel:

package test;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class JaCoBTest {
        public static void main(String[] args) {
                String EXCEL_FILE = "FullPathOfAnExcelFile.xlsx";
                // Using Excel as an example
                ActiveXComponent app = new ActiveXComponent("Excel.Application");
                // Modify a property, to show Excel window
                app.setProperty("Visible", true);
                // Get Excel workbook object
                Dispatch workbook = app.getProperty("Workbooks").toDispatch();
                // Call method, to open an Excel file
                Dispatch.call(workbook, "Open", new Variant(EXCEL_FILE), new Variant("1"));
                // Wait for 5 seconds
                try {
                        Thread.sleep(1000);
                } catch (InterruptedException iex) {
                        iex.printStackTrace();
                }
                // Close Excel without saving
                workbook.call(workbook, "Close");
                // Close is supposed to have three optional parameteters, but the line below is not working
                //workbook.call(workbook, "Close", new Variant(false), Variant.DEFAULT, Variant.DEFAULT);
                // Close Excel
                Dispatch.call(app, "Quit");
        }
}

В приведенном выше коде есть одна проблема — я не могу заставить работать необязательные параметры. Предполагается, что функция Workbook.Close принимает три необязательных параметра, но вызов всегда терпит неудачу с недопустимым количеством параметров.

Я также нашел веб-страницу, которой пользовался тогда: http://danadler.com/jacob/. страница выше содержит ссылку на часто задаваемые вопросы, но она немного устарела.

person KC Wong    schedule 05.10.2016
comment
Во-первых, я хотел бы поблагодарить вас за ваш ответ, в настоящее время я больше читаю о JNI, и JACOB определенно следующий в моем списке (или наоборот, если вы так рекомендуете). К сожалению, у меня нет опыта ни в том, ни в другом (я могу использовать C и Java, но действительно на базовом уровне). Я всего лишь инженер-химик, который использует программирование для достижения конечной цели, так что мне не хватает многих технических деталей... - person Peter; 05.10.2016
comment
Если в любом случае вы можете дать мне фору (дайте мне статью, справочник, книгу, что-нибудь ..), чтобы понять, как работает COM и / или JACOB, я был бы очень благодарен. - person Peter; 05.10.2016
comment
Это было очень давно (более 10 лет), поэтому мне понадобится немного времени, чтобы пробудить память о JaCoB. Если у вас нет опыта работы с C и Java, то использовать JNI не рекомендуется, так как это требует от вас очень осторожного отношения к управлению памятью и многопоточности. Я постараюсь подготовить пример через несколько дней. - person KC Wong; 05.10.2016
comment
Я не могу вас отблагодарить. В настоящее время я изучаю JACOB и пытаюсь получить CLSID своего приложения с помощью средства просмотра OLE... Я с нетерпением жду вашего примера. - person Peter; 06.10.2016
comment
Я обновил свой ответ примером и ссылками на ресурс, который я использовал тогда. - person KC Wong; 07.10.2016