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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值