注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

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

2010-01-02 04:21:41|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

解决win7右键没有“将此程序锁定到任务栏”或“附到开始菜单” 以及 导入注册表时可能会提示没有权限的解决办法 - 和申 - 和申的个人主页

送个神秘礼物给 TA     原来她穿这个    便宜正品是搜出来的

数码,还是国外原产的好 超级本本降价风暴 淘宝2009秋季DC新品看点 超级无敌外形定制手机

淘宝风云榜   居家频道    美容频道    食品频道   男人频道   电器商场    数码频道    电器城频道

在使用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参数疑难问题解决方法【真正解决】 - 和申 - 和申的个人主页

  评论这张
 
阅读(1248)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016