jacob调用OCX错误.doc_第1页
jacob调用OCX错误.doc_第2页
jacob调用OCX错误.doc_第3页
jacob调用OCX错误.doc_第4页
jacob调用OCX错误.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Jacob调用OCX时,有时候会出现8000FFFF问题,在网上遍寻也找不到答案,最终在微软文档中找到了灵感,解决了8000FFFF问题。通过Java调用OCX控件有几种方法,JNI、JACOB、Jawin等 1.JNI最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐。2.Jawin尝试了一下,效果不错,但相对来说,其编程风格更贴近Windows,离Java有点远3.Jacob使用Jacob非常方便,Java编程风格,需要了解的知识比较少。下载地址/projects/jacob-project/Jacob的使用方法1.初始化 ComThread.InitMTA(true);ActiveXComponent com = new ActiveXComponent(组件的ProgID) ;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。问题解决在使用Jacob调用OCX控件时,总是出一个异常Exception in thread main .ComFailException: A COM exception has been encountered: At Invoke of: InitDescription: 灾难性故障 通过Jawin调用,会出现8000FFFF错误。这个错误是由ActiveX结构设计造成的。在Ole4.0版本之前,外部程序是可以直接调用OCX中方法的。Ole4.0之后,每次调用控件中的方法,系统会自动检查是否允许调用,即运行COleControl.IsInvokeAllowed (DISPID)该方法检查控件是否正确的初始化或者是否通过持久存储接口正确加载,如果两个条件有一个满足,即返回TRUE,否则返回FALSE。当控件在MFC中使用时,很多细节,如初始化,都被过滤了,这样,大多数用户都不会遇到这个问题。但是,当我们从C、C+的dll中调用控件时,不满足上述条件,该方法返回FALSE,这时候再调用任何控件方法,都会出现上述异常。解决方法很简单,在OCX控件中,重写COleControl.IsInvokeAllowed (DISPID)方法,即在控件的CMyNameCtrl中增加一个方法BOOL CMyNameCtrl:IsInvokeAllowed (DISPID) return TRUE; 问题解决 转网上文章大家好啊! 我是寻觅最近天气变化多,大家要多注意身体啊好了进如正题,最近在帮个朋友做java调用office的东东,花了些时间,终于搞定了由于问题多多,现在把过程和大家分享:首先,大家先要了解一下jacob ,官方的解释是Java COM Bridge,即java和com组件间的桥梁(进一步了解com/dcom: /com/)com一般表现为dll或exe等二进制文件,像我们呆会会用到的jacob.dll文件这里说说为什么我们用java去操纵office(如:word)要使用com,而不直接使用java去做?首先,我们清楚office是建立在windows平台之上的,本身是一个软件,除了他自己提供的宏似乎没有什么能对他进行直接的操作;在windows平台上为了解决像这样的不同应用软件,通信缺乏通用api问题,推出了com的解决方案;我们使用dll中的一组或多组相关的函数存取组件数据,总的合称为接口具体到每个细节的实现称为方法;如果我们要调用接口里的方法,唯一的途径就是调用指向接口的指针; 所以总的来说使用就是dll完成api的转换;如果你听不懂,则称为废话(不懂没关系,会用就好,用久自然懂了);开玩笑,呵呵好了com讲完,我们开始我们的主要内容吧!大家先下载这里jacob_1.9.zip里面的jacob.jar是我们要用的包 jacob.dll就是我前面说的com组件把包里的jacob.dll放到c:/windows/system32下讲解麻烦,画个图大家看 好值得注意的是,不同的版本的系统使用不同的dll文件所以如果你编译成功,但运行失败一般是dll文件问题遇到这种情况,可以到/jacob-project/jacob_1.9.zip?modtime=1109437002&big_mirror=0下载其他的版本的 dll 文件。先给大家个word的测试代码(经过更改该代码在我的机器上运行正常)以后有会找时间,推出其他的office代码 import com.jacob.activeX.ActiveXComponent; import .ComException; import .Dispatch; import .Variant; public class WordDocumentProperties / 声明一个word对象 private ActiveXComponentobjWord; / 声明四个word组件 private DispatchcustDocprops; private DispatchbuiltInDocProps; private Dispatchdocument; private DispatchwordObject; public WordDocumentProperties() /*/ /* *打开word文挡 */ public void open(Stringfilename) / 创建一个word对象 objWord = new ActiveXComponent( Word.Application ); / 为wordobject组件附值 wordObject = (Dispatch)(objWord.getObject(); / 改了这里 / 生成一个只读方式的word文挡组件 Dispatch.put(wordObject, Visible , new Variant( false ); / 获取文挡属性 Dispatchdocuments = objWord.getProperty( Documents ).toDispatch(); / 打开激活文挡 document = Dispatch.call(documents, Open ,filename).toDispatch(); public void selectCustomDocumentProperitiesMode() custDocprops = Dispatch.get(document, CustomDocumentProperties ).toDispatch(); public void selectBuiltinPropertiesMode() builtInDocProps = Dispatch.get(document, BuiltInDocumentProperties ).toDispatch(); /*/ /* *关闭文挡 */ public void close() Dispatch.call(document, Close ); public StringgetCustomProperty(StringcusPropName) try cusPropName = Dispatch.call(Dispatch)custDocprops, Item ,cusPropName).toString(); catch (ComExceptione) cusPropName = null ; return cusPropName; public StringgetBuiltInProperty(StringbuiltInPropName) try builtInPropName = Dispatch.call(Dispatch)builtInDocProps, Item ,builtInPropName).toString(); catch (ComExceptione) builtInPropName = null ; return builtInPropName; public static void main(Stringargs) try WordDocumentPropertiesjacTest = new WordDocumentProperties();jacTest.open( s.doc );jacTest.selectCustomDocumentProperitiesMode();jacTest.selectBuiltinPropertiesMode();StringcustValue = jacTest.getCustomProperty( InformationSource );Stringbuilt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论