原创 在java中使用Jawin组件访问Windows下的COM组件(转)

2008-11-20 03:21 5101 7 7 分类: 软件与OS

http://blog.sina.com.cn/s/blog_5921d4ba010007jo.html




日期:2007-2-23(正月初六)

环境:windows XP Home版;Office2000;j2se 1.6.0(JRE也是1.6.0);Jawin 2.0-alpha1。

 

原由:使用Jacob访问windows下的COM组件的试验老是不成功(后来搜索到http://blog.sina.com.cn/u/435ce819010002r0,按他的办法据说可以成功),折腾了我一天。网上有说使用Jawin的,我试了一试就成功了,比Jacob顺利多了。据说Jawin比Jacob功能强大。



    (1)Jawin(Java/Win32)是一个免费的、开放源代码的体系结构,用于 Java 组件与 Windows COM 对象或 Windows DLL 之间的互操作。Jawin 允许 Java 应用程序调用任何基于 COM 或 DLL 的遗留代码,而不需要编写任何 JNI 代码。您的代码将能与诸如 Microsoft Office 套件等可编写脚本的应用程序交互,调用诸如 Microsoft 的基于 COM 的 XML 解析器和工具等可编写脚本的逻辑组件,以及访问诸如 Windows 注册表、安全 API 和事件日志等 Win32 API 特性。
    (2)Jawin 包括一个用于可编写脚本的 COM 组件的代码生成器(typebrowser),该代码生成器读取类型库,并自动产生Java 应用程序中调用该组件所需要的 Java 存根(stub)。
http://sourceforge.net/projects/jawinproject/


 

Jawin 2.0-alpha1下载地址:http://jawinproject.sourceforge.net/

 

下载文件是一个zip文件,叫jawin-2.0-alpha1.zip。解压缩后,将bin\jawin.dll文件(约264k)拷贝到系统的system32文件夹下,将lib\jawin.jar和lib\jawin-stubs.jar拷贝到C:\J2SE6\jre\lib\ext文件夹下(我的j2se JDK安装在c:\J2SE6文件夹下)。其他设置不需要做。

 

举例1:CreateWord.java,新建一个Word文档。



/******************************************
 *CreateWord.java
 *Create a Word document
 *
 * version     1.0
 * author      Howwa@sina.com
http://blog.sina.com.cn/u/1495389370
*******************************************/

import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;


public class CreateWord {
public static void main(String[] args) {
  try {
   Ole32.CoInitialize(); 
//初始化
   DispatchPtr app = new DispatchPtr("Word.Application");
//创建word对象
   app.put("Visible", true);
//使word 可见
   DispatchPtr docs = (DispatchPtr)app.get("Documents");
//获得document对象集合
   DispatchPtr doc = (DispatchPtr) docs.invoke("Add"); 
//新增一个文档
   app.invoke("Activate"); 
//激活当前文档
   Ole32.CoUninitialize(); 
//释放对象
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}


 

 

举例2:OpenWord.java,打开一个已存在的Word文档。



/******************************************
 *OpenWord.java
 *Open a Word document
 *
 * version     1.0
 * author     Howwa@sina.com
http://blog.sina.com.cn/u/1495389370
*******************************************/


import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;


public class OpenWord {
public static void main(String[] args) {
  try {
   Ole32.CoInitialize();
   DispatchPtr app = new DispatchPtr("Word.Application");
   app.put("Visible", true);
   DispatchPtr docs = (DispatchPtr)app.get("Documents");
   DispatchPtr doc = (DispatchPtr) docs.invoke("Open", "C:\\test.doc");
    Ole32.CoUninitialize();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}


在编译、运行时要注意大小写。同时,C盘根目录下要有test.doc文件。


 

 

 

 

 

 

 

 

 

 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条