首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java 调com 组件(dll资料)

2012-12-25 
Java 调com 组件(dll文件)1. java 核心 jni 原理绍前一段时间有同事长问我说java 设用dll 库很不方便可他

Java 调com 组件(dll文件)

1. java 核心 jni 原理绍

前一段时间有同事长问我说java 设用dll 库很不方便可他不会c/c++?

因为java 1.0 版本后有一个接口名为jni

他的原理就是

.java---编译--->.class---javah-->.h-----引用---.c/.cc/.cpp---->.dll

最后

.java中有一条 System.loadLibrary("DllName");

在通过public native static getUserInfo(String username,String sid);

来调c 实现的方法

这样对c/c++ 有一定功底的人来说是没有多大问题的。

但是要想调dll 、com 组件 没有必要做这一些事情

早在1999年开源组织就以经出现了像jacob 这一类开源项目,当然做的比较成

功有很多,例如jacob、jacom、jawin、jnative等

在这时给大家介绍一个最成熟的项目jacob 早在1999年就成立了这个开源项目

经过了十几年的测试应用。所以要相信开源相信java 的魅力。

?

?

2. 下载jacob 开源包

?在jdk/bin 目录下加入jacob.dll 文件

3.下载 1.15 版本

Regsvr32 filename.dll 注册该文件 如果没有成功说明 对应com 组件依敕的dll 文件没有(同c/c++) 一样对应的

依赖包将这些方入jdk /bin目录下

这一步一定要注册成功,不然后面的就没有办法了

你想如果注册没有成功c 都调不到java 肯定也调不到你说对吧

?

4. 写代码就很容易了不是

?当然接口中加入jacob.jar 包

package com.test;import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.Variant;/** *  * 2008-10-5 * @author liuqing * */public class JaCobTest { int EXCEL_HTML = 44;   /** * @param args */public static void main(String[] args) {                                 //注册com组件ActiveXComponent app = new ActiveXComponent("PB80.n_fl_tj_xs_interface");try {Dispatch disp = app.getObject();Object []ob = new Object[]{"argOne","argTwo"};Variant v = Dispatch.callN(disp, "of_qx_tjdj", ob);int a = v.getInt();System.out.println("com 接口说:" + a);}catch (Exception e) {}}/** * Excel 测试 * @param xlsfile * @param htmlfile */public void excelToHtml(String xlsfile, String htmlfile)     {          ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动excel         try{              app.setProperty("Visible", new Variant(true));            Dispatch excels = app.getProperty("Workbooks").toDispatch();             Dispatch excel = Dispatch.invoke(excels,"Open",Dispatch.Method,new Object[] { xlsfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();             Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(EXCEL_HTML) }, new int[1]);             Variant f = new Variant(false);             Dispatch.call(excel, "Close", f);          }          catch (Exception e) {            e.printStackTrace();          }          finally {               app.invoke("Quit", new Variant[] {});          }      }   }

?

?

? 运行OK

?

?

?

热点排行