jacob java ocx_通过Jacob与OCX控件通讯的步骤以及错误分析

详细步骤:

1)在项目的工程下导入Jacob.jar这个包

2)在“C:\WINDOWS\system32”目录下,把jacob.dll文件拷贝进去,需要管理员权限(需要注意的:你的dll版本要跟你的系统版本一致)

3)OCX控件安装(需要注意的是:你需要把OCX控件注册到注册表里)

4)Java实现步骤

①:初始化

ActiveXComponent active= new ActiveXComponent("组件的ProgID") ;

Dispatch dis = active.getObject();

注意:如果只知道ClassID,可以去注册表里面根据ClassID搜索到ProgID。

②:调用控件的方法

无参调用:Dispatch.call(dis, "方法名").getInt();

有参调用:Dispatch.call(dis,"方法名",new Variant(args)).getInt();

错误分析

1)java.lang.UnsatisfiedLinkError: no jacob in java.library.path

原因:没有把jacob.dll文件拷贝到“C:\WINDOWS\system32”目录下

2)Can't get object clsid from progid

原因:没有安装OCX控件,或者没有写正确的ProID

3)com.jacob.com.ComFailException: A COM exception has been encountered:

At Invoke of: LoadFile

Description: 8000ffff/灾难性故障

原因:这个错误是由ActiveX结构设计造成的。网上一大推解释就不详细说明了。

解决方法:

在OCX控件中,重写COleControl.IsInvokeAllowed (DISPID)方法,即在控件的CMyNameCtrl中增加一个方法:

BOOL CMyNameCtrl::IsInvokeAllowed (DISPID)

{

return TRUE;

}

注意:程序服务也要重启一下,就能解决了

4)Can't find moniker

解决方法:把声明ClassId的“CLSID:”去掉。

5)Can't load IA 32-bit.dll on a AMD 64-bit platform

解决方法:版本不兼容,如果你是64位系统就下载64位的dll,32位系统就下载32位的dll

由于最近项目要用到这个开源组件,所以在网上查阅了些资料,最后实现了。上面是我在使用的过程中遇到的方法和问题。若有不当之处,希望大家多多指明。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值