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

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

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

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

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

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

Кто-нибудь может дать совет?

Спасибо

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/ На приведенной выше странице есть ссылка на FAQ, но она немного устарела.

Другие вопросы по тегам