感觉JACOB 比jcom好用,调用很方便

在使用java 与com 相互调用的方法中采用jacob的方法,比jcom要好用的得多

如下是C++ Com 组件的定义文档 IDL

simpleDll.idl : simpleDll 的 IDL 源
//

// 此文件将由 MIDL 工具处理以
// 产生类型库(simpleDll.tlb)和封送处理代码。

import "oaidl.idl";
import "ocidl.idl";

[
	object,
	uuid(F2F1B880-B6EB-44B0-9821-6B5F6DEE7D89),
	dual,
	nonextensible,
	helpstring("ItestDll 接口"),
	pointer_default(unique)
]
interface ItestDll : IDispatch{
	[id(1), helpstring("方法returnStr")] HRESULT returnStr([out,retval] BSTR* result);
	[id(2), helpstring("方法a")] HRESULT a([in] BSTR strin, [out,retval] BSTR* strout);
	[id(3), helpstring("方法b")] HRESULT b([in] BSTR str1, [in] LONG i3, [out,retval] BSTR* result);
	[id(4), helpstring("方法c")] HRESULT c([in] BSTR a, [in] BSTR b, [in] BSTR cx, [out,retval] BSTR* ret);
	[id(5), helpstring("方法d")] HRESULT d([in] LONG a, [out,retval] BSTR* c);
	[id(6), helpstring("方法e")] HRESULT e([in] SHORT a);
	[id(7), helpstring("方法f")] HRESULT f([in] SHORT a, [out,retval] LONG* b);
	[id(8), helpstring("方法g")] HRESULT g([in] DOUBLE a, [out,retval] DOUBLE* d);
};
[
	uuid(BBAF4F2C-B518-424D-AF18-EB5557EFE8DE),
	version(1.0),
	helpstring("simpleDll 1.0 类型库")
]
library simpleDllLib
{
	importlib("stdole2.tlb");
	[
		uuid(1527E009-D95D-4ED6-821C-C58C228424ED),
		helpstring("testDll Class")
	]
	coclass testDll
	{
		[default] interface ItestDll;
	};
};

 

 JCOM 的调用方式:

import jp.ne.so_net.ga2.no_ji.jcom.IDispatch;
import jp.ne.so_net.ga2.no_ji.jcom.ReleaseManager;

public class Javacall {

	static {
		System.loadLibrary("jcom");
	}

	public static void main(String[] args) {
		process(null);
	}

	public static String process(Object[] o) {
		ReleaseManager rm = new ReleaseManager();
		try {
			IDispatch vbcom = new IDispatch(rm, "simpleDll.testDll.1");
			Double l = 234.00;
			Double bb =(Double) vbcom.method("g",new Object[]{l});
			System.out.println("return: " + bb);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			rm.release();
		}
		return null;
	}
}

 

Jacob调用方式:

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

/**
 * @author wanggang
 * @version Dec 30, 2009
 */
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Dispatch dis = new Dispatch("simpleDll.testDll");
		Variant ret = dis.call(dis, "g", 234);
		System.out.println(ret);
		
		Variant ret1 = dis.call(dis, "returnStr");
		System.out.println(ret1);
		Variant ret2 = dis.call(dis, "d",1.0);
		System.out.println(ret2);
		///
		
		 ret2 = dis.call(dis, "e",1111);
		System.out.println(ret2);
		ret2 = dis.call(dis, "f",22222);
		System.out.println(ret2);
	}

}

 

对于传入类型的支持,对于jcom,由于文档是日文的看的不是很懂,而且,在传入的参数列表中,不能有Long类型,有的话,就被认为是jobject,这很郁闷,还有在参数中同时有short ,string,double 莫名的出错。而且调用的时候必须得传参数对象数组。

  而jacob,传入的类型,就没有限制了,甚至接口用的是short 我传long类型的也没有报错,当然,我还没有看超出精度范围的时候是否报错,而且传参的时候,可以用dis.call(dis, "e",1111);看API有若干个这样的重载函数,比较方便。

存储过程IN参数疑难问题解决方法【真正解决】 - 和申 - 和申的个人主页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值