`
天涯海角tour
  • 浏览: 170176 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

java 通过 JACOB 调用 ocx

    博客分类:
  • java
阅读更多

[转载]

http://lvqingboy-163-com.iteye.com/blog/769358

 

Jacob的使用方法:

 

首先--

 

1.在工程中导入 jacob.jar 这个包。
2.把 jacob.dll 拷贝到 jdk\bin或者C:\WINDOWS\system32目录下。

以上的两个文件您可以到网上
http://danadler.com/jacob/ 下载的1.7的版本
jacob.jar 与 jacob.dll 版本一致。

3.注册ocx控件

l  先把***.ocx控件放入c:\windows\system32 文件夹下

l  在cmd命令行下,输入regsvr32  ***.ocx命令进行注册

 

Java代码:

1.初始化 

ActiveXComponent com = new ActiveXComponent("classid:") ;

Dispatch disp = com.getObject();

 

2.调用控件里面的方面

2.1调用无参的方法,并返回一个short

Dispatch.call(disp, "Init").getShort();

 

 

2.2调用有一个参数的方法,并返回一个boolean

Dispatch.call(disp,"Method",new Variant(args)).getBoolean();

调用多个参数依次类推,注意在传递参数前,将Java中的参数转换成Variant

 

bug解决:

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

原因是:没有把 jacob.dll 拷贝到 jdk\bin或者C:\WINDOWS\system32目录下

 

2.Exception in thread "main" com.jacob.com.ComFailException: Can't get object clsid from progid

 原因是:regsvr32  ***.ocx命令进行注册后 ,获取的progid有误;

 

3.

 

 

 

 

原因是:

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

BOOL CMyNameCtrl::IsInvokeAllowed (DISPID)

   {

      return TRUE;

   }

用这个方法的理由是:

这个错误是由ActiveX结构设计造成的。

Ole4.0版本之前,外部程序是可以直接调用OCX中方法的。Ole4.0之后,每次调用控件中的方法,系统会自动检查是否允许调用,即运行COleControl.IsInvokeAllowed (DISPID)

该方法检查控件是否正确的初始化或者是否通过持久存储接口正确加载,如果两个条件有一个满足,即返回TRUE,否则返回FALSE

当控件在MFC中使用时,很多细节,如初始化,都被过滤了,这样,大多数用户都不会遇到这个问题。但是,当我们从CC++dll中调用控件时,不满足上述条件,该方法返回FALSE,这时候再调用任何控件方法,都会出现上述异常。

Exception in thread "main" com.jacob.com.ComFailException: A COM exception has been encountered:

At Invoke of: LoadFile

Description: 灾难性故障

    at com.jacob.com.Dispatch.invokev(Native Method)

    at com.jacob.com.Dispatch.invokev(Dispatch.java:858)

    at com.jacob.com.Dispatch.callN(Dispatch.java:455)

    at com.jacob.com.Dispatch.call(Dispatch.java:544)

    at com.lv.office.AIPToTest.jacob(AIPToTest.java:24)

    at com.lv.office.AIPToTest.main(AIPToTest.java:14)

分享到:
评论

相关推荐

    java通过jacob调用ocx.rar

    java通过jacob调用ocx插件,包括配置文档和jacob-1.17-M2.zip包

    java的jacob调用OCX

    java的jacob调用OCX java的jacob调用OCX(包含错误的处理)

    java调用ocx控件,jacob,jar和dll文件

    java调用ocx控件,jacob,jar和dll文件

    通过 JACOB 实现 Java调用ocx控件

    通过 JACOB 实现 Java调用ocx控件,一MSCOMM32.OCX为例,有代码

    jacob调用OCX控件总结

    介绍通过Java调用OCX控件几种方法,同时介绍调用控件时出现com.jacob.com.ComFailException 8000FFFF 错误的解决方法,历时两周,终于在微软文档中找到灵感,绝对原创,不过为连贯考虑,还是加上了一些网友提供的...

    jacob/js调用ocx控件的demo

    主要涵盖jacob调用ocx控件的方法以及事件的源码demo,同时还有html页面中通过js调用ocx控件的代码示例,并附带自己开发的ocx控件,运行时需要注意先注册控件,并且配置好jacob安装包。

    Java通过Jacob调用ActiveX,进行二进制数据交换

    该工程项目演示了Java通过jacob1.17调用ActiveX的基本方法。对于单个的基本类型的数据(byte、short、long、BOOL)等类型的数据,以及有很多字节组成的可见英文字符、汉字等组成的字符串(LPCTSTR、BSTR类型都会进行...

    jacob技术开发文档

    java调用ocx控件的方法,jacob技术调用ocx控件的步骤、流程,java项目调用具体代码,java调用ocx控件参数传递,jacob调用ocx控件常见bug解决办法,并且附上了java调用word控件的demo代码

    java调用dll和ocx的开源控件

    java调用dll和ocx的开源控件,为当前最好用的控件,dll和ocx可是VB或VC开发的控件。

    jacob1.18源码和jar包

    调用jacob dll内的方法 比如:Dispatch java就通过LibraryLoader和Dispatch h Dispatch cpp建立联系 从而建立起java到jacob dll到jni的之间的联系 LSH 调用Microsoft MediaPlayer等 )">JACOB里的总共有两个包:...

    jacob大全-java操作office

    通过Java调用OCX控件使用Jacob非常方便,Java编程风格,需要了解的知识比较少。

    JACOB各版本下载

    Java调用OCX控件 JACOB 使用Jacob非常方便,Java编程风格,需要了解的知识比较少。

    jacob-1.20 jacob-1.19 jacob-1.17

    java调用ocx

    jacob1.18源码+jar包

    调用jacob dll内的方法 比如:Dispatch java就通过LibraryLoader和Dispatch h Dispatch cpp建立联系 从而建立起java到jacob dll到jni的之间的联系 LSH 调用Microsoft MediaPlayer等 )">JACOB里的总共有两个包:...

    jacob-1.14.3-x64_x86.zip

    java代码调用ocx,调用dll库,使用需要用到的dll文件。包含64位和32位

    jacob-1.17-M2(支持64位和32位)

    jacob-1.17-M2(支持64位和32位) Java调用OCX控件 JACOB 使用Jacob非常方便,Java编程风格,需要了解的知识比较少。

Global site tag (gtag.js) - Google Analytics