Как работать с com объектами в java?

Пользователь

от elissa , в категории: Java , 8 месяцев назад

Как работать с com объектами в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от rebekah , 8 месяцев назад

@elissa 

В Java можно работать с COM-объектами, используя Java-COM Bridge (jacob). Jacob - это Java-библиотека, которая обеспечивает возможность обращения к COM-объектам из Java-кода.


Вот простой пример работы с COM-объектом в Java с использованием Jacob:

  1. Скачайте Jacob с официального сайта: https://sourceforge.net/projects/jacob-project/
  2. Разархивируйте скачанный архив и добавьте jacob.jar в свой проект.
  3. Скопируйте jacob.dll из архива в каталог вашего проекта (находящийся в одной директории с jacob.jar).


Теперь вы можете использовать Jacob для взаимодействия с COM-объектами.

  1. Создайте новый Java-класс и импортируйте классы Jacob: import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant;
  2. Создайте экземпляр COM-объекта и выполните вызовы методов: public class COMExample { public static void main(String[] args) { // Создаем экземпляр COM-объекта ActiveXComponent component = new ActiveXComponent("Excel.Application"); // Получаем объект Workbook Dispatch workbook = component.getProperty("Workbooks").toDispatch(); // Открываем файл Dispatch.call(workbook, "Open", "C:\path\to\file.xls"); // Получаем объект Worksheet Dispatch worksheet = Dispatch.get(workbook, "ActiveSheet").toDispatch(); // Извлекаем значение из ячейки Dispatch cell = Dispatch.invoke(worksheet, "Range", Dispatch.Get, new Object[] { "A1" }, new int[1]).toDispatch(); Variant value = Dispatch.get(cell, "Value"); // Выводим значение на экран System.out.println("Value: " + value); } }


Здесь мы создали экземпляр COM-объекта Excel.Application, открыли файл Excel, получили значение ячейки A1 и вывели его на экран.


Обратите внимание, что для каждого вызова метода COM-объекта мы используем методы класса Dispatch. Variant используется для работы с возвращаемыми и передаваемыми значениями.


После завершения работы с COM-объектом, убедитесь, что правильно закрываете соединение и освобождаете память, вызвав методы Release() и Quit(), например:

1
2
3
4
5
6
7
8
// Закрытие файла Excel
Dispatch.call(workbook, "Close", false);

// Выход из Excel
component.invoke("Quit");

// Освобождение ресурсов
ComThread.Release();


Это основы работы с COM-объектами в Java с использованием Jacob. Более подробную информацию можно найти в документации Jacob и на официальном сайте проекта.

Пользователь

от laney_johnson , 3 месяца назад

@elissa 

Помимо библиотеки Jacob, также существует альтернативный способ работы с COM-объектами в Java с использованием библиотеки J-Interop. J-Interop предоставляет возможность взаимодействия с COM-объектами через прослойку DCOM на уровне протокола MS DCOM. Вот пример работы с COM-объектом с использованием J-Interop:

  1. Добавьте зависимость на J-Interop в ваш проект. Например, если вы используете Maven, добавьте следующий зависимость в файл pom.xml:
1
2
3
4
5
<dependency>
    <groupId>org.jinterop</groupId>
    <artifactId>j-interop</artifactId>
    <version>2.0.8</version>
</dependency>


  1. Создайте экземпляр COM-объекта и выполните вызовы методов:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import org.jinterop.dcom.common.JIException;
import org.jinterop.dcom.core.JIComServer;
import org.jinterop.dcom.core.JIProgId;
import org.jinterop.dcom.core.JISession;
import org.jinterop.dcom.core.JIString;
import org.jinterop.dcom.core.JIVariant;
import org.jinterop.dcom.core.JISystem;

public class COMExampleJInterop {
    public static void main(String[] args) {
        try {
            JISystem.setAutoRegisteration(true);

            // Создаем сеанс для подключения к COM-объекту
            JISession session = JISession.createSession("username", "password", "domain");

            // Создаем COM-сервер с помощью progId (например, Excel.Application)
            JIComServer comServer = new JIComServer(JIProgId.valueOf("Excel.Application"), "hostname", session);

            // Вызываем методы COM-объекта
            JIVariant result = comServer.callMethodA("SomeMethod", new JIString("argument"));

            // Печатаем результат
            System.out.println("Result: " + result.getObjectAsString());
        } catch (JIException e) {
            e.printStackTrace();
        } finally {
            JISession.destroySession(session);
        }
    }
}


Здесь мы создали сеанс подключения к COM-объекту, создали COM-сервер с использованием progId, вызвали метод объекта и вывели результат. Убедитесь, что после использования COM-объекта правильно закрываете сессию.


Выбор между Jacob и J-Interop зависит от ваших потребностей и предпочтений. Обе библиотеки обеспечивают доступ к COM-объектам из Java, но имеют свои особенности и специфику использования.