转 java调用com组件方法

 

对照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了。

posted @ 2009-11-02 10:18  喝水的牛儿  阅读(6747)  评论(0编辑  收藏  举报