Java使用jocab调用COM组件
最近工作上遇到了要调用COM组件获取信息的问题,总结一些如何使用Java调用COM组件。
(一开始对方发来的是.dll文件,我以为是sdk,一直用JNA来调用,发现一直失败。后来对方发来的测试文件中有一个注册组件,才发现原来是要现将.dll文件注册到COM组件中,然后再调用其COM组件)
由于网上关于JAVA调用COM组件的文章很少,很多问题都是查了很多资料才解决的,就把自己遇到的问题总结一下。
先来说一下什么是jocab。
jocab简介
Jacob是Java与COM组件桥接的缩写,即JAVA-COM Bridge。通过使用Jacob类库,我们可以很方便地在Java程序中调用COM自动化组件。也就是说jocab是java和COM组件的中间件。
jacob中最重要的几个类:
- ActiveXComponent类:继承Dispatch类,在内部封装了Dispatch对象,使用该类加载COM组件。
- Dispatch类:代表COM自动化组件中的对象,提供了访问COM对象的API。
- Dispatch.get(dispatch, String name);获取对象属性
- Dispatch.put(dispatch, String name, Object value);设置对象属性
- Dispatch.call(dispatch, String name, Object… args);调用对象方法
- Variant类:映射COM对象中的Variant数据结构,提供Java和COM的数据交互。其本质就是一种数据类型,可以被转换成任何数据类型,如int,String,甚至Dispatch对象。
jocab的部署
先将jacob.jar添加到lib中,如果是maven工程,在pom.xml中写入依赖
<dependency>
<groupId>com.hynnet</groupId>
<artifactId>jacob</artifactId>
<version>1.18</version>
</dependency