对照vb代码实现java调用com组件方法
2009-03-02 14:39
1.简介
java调用com组件方法,最简单的方法莫过于使用JACOB控件。
JACOB就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。这是一个开始于1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。最好的支持地点:http://groups.yahoo.com/group/jacob-project
Jacob下载地址:
http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368
Jacob的安装非常的简单,我们解开下载的jacob_1.9.zip,在文件夹中找到jacob.dll和jacob.jar两个文件。Jacob直接放到系统的system32文件夹下就行了,连注册都不用的(或者拷贝到jdk或者jre的bin目录下也行,当前测试文件所在的目录也行,就是只要在java.library.path中就可以)。而jacob.jar设置到classpath中去就可以了,或者在IDE开发环境的工程中设置扩展库也一样的。
2.对照VB的代码
举例:发送一个普通的消息到办公平台大蚂蚁
Dim Session, Msg,LoginInfo
Set Msg = CreateObject("AntCom.AntMsg")
Set Session = CreateObject("AntCom.AntSyncSession")
Set LoginInfo = CreateObject("AntCom.AntLoginInfo")
Msg.Subject = "Start" '消息的标题
Msg.Content = "hi, im admin" '消息的内容
Msg.AddReceiver "user" , "" '消息接收者,如果要发给多个人可以从次调'用 AddReceiver
Msg.ContentType = "Text/Text" '消息内容的格式
LoginInfo.Server = "127.0.0.1" 'Bigant 的服务器地址
LoginInfo.ServerPort = 6080 'Bigant 的服务端口
LoginInfo.LoginName = "Admin" '消息发送者的 LoginName
LoginInfo.PassWord = "" '消息发送者的 Password
Session.Login LoginInfo '登录
Session.SendMsg Msg, 0
3.分析
由上VB代码可以看出,分三步操作。首先利用CreateObject("AntCom.AntMsg")初始化ActiveX对象,然后设置各对象的属性值,例如Msg.Content = "hi, im admin",最后再调用对象的方法Session.SendMsg Msg, 0。很简单,设置属性值就是那种带=号的语句,不带=号就是方法操作。
4.对应java代码
我们也分三步走。第一步,创建ActiveX对象,在创建之前引入 com.jacob.activeX.*; com.jacob.com.*;二个包。然后再创建对象ActiveXComponent smsg = new ActiveXComponent("AntCom.AntMsg");在java中,多有一步,必须Dispatch msg = smsg.getObject();处理才能真正得到该ActiveX对象,才能对它进行操作。
第二步,设置对象属性。对应3中的举例Msg.Content = "hi, im admin",对应的java语句就是Dispatch.put(msg,"Content","hi,i'm admin")。
第三步,调用对象方法。对应3中的举例Session.SendMsg Msg, 0,对应的java语句就是Dispatch.call(ses, "SendMsg",msg,0);
5.完整的代码。上面2中举例的所有vb代码,转成java就是:
package test;
import com.jacob.activeX.*;
import com.jacob.com.*;
public class Test {
public static void main(String[] args){
ActiveXComponent smsg = new ActiveXComponent("AntCom.AntMsg");
ActiveXComponent sses = new ActiveXComponent("AntCom.AntSyncSession");
ActiveXComponent sinfo = new ActiveXComponent("AntCom.AntLoginInfo");
Dispatch msg = smsg.getObject();
Dispatch.put(msg,"Subject","Start");
Dispatch.put(msg,"Content","hi,i'm administrator");
Dispatch.call(msg,"AddReceiver", "user","");
Dispatch.put(msg,"ContentType","Text/Text");
Dispatch info = sinfo.getObject();
Dispatch.put(info,"Server","127.0.0.1");
Dispatch.put(info,"ServerPort",6080);
Dispatch.put(info,"LoginName","Admin");
Dispatch.put(info,"PassWord","");
Dispatch ses = sses.getObject();
Dispatch.call(ses, "Login",info);
Dispatch.call(ses, "SendMsg",msg,0);
}
}
呵呵。到这里就全部OK了。