开发者社区 问答 正文

jacob获取属性,报错com.jacob.com.ComFailExcepti?报错

我在调用其他公司提供的DLL,获取属性的时候:

 String fpdm0=  Dispatch.get(ds, "FPDM").getString(); 

,报了这个错:

com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: FPJE
Description: ??Ч??????????


at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.invokev(Dispatch.java:804)
at com.jacob.com.Dispatch.get(Dispatch.java:1153)
at nc.ui.so.so002.SaleInvoiceUI.onSoTax(SaleInvoiceUI.java:2837)
at nc.ui.so.so002.SaleInvoiceUI.onButtonClicked(SaleInvoiceUI.java:6390)
at nc.ui.pub.ToftPanel.handleButtonEvent(ToftPanel.java:204)
at nc.ui.pub.FramePanel.dispatchButtonEvent(FramePanel.java:309)
at nc.ui.pub.FramePanel.access$100(FramePanel.java:58)
at nc.ui.pub.FramePanel$ButtonHandler.buttonClicked(FramePanel.java:181)
at nc.ui.pub.ButtonBar.firePostEvent(ButtonBar.java:357)
at nc.ui.pub.ButtonBar$1.run(ButtonBar.java:225)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

展开
收起
爱吃鱼的程序员 2020-06-14 15:21:40 828 分享 版权
阿里云 AI 助理回答

遇到这个错误,说明你在使用Jacob库调用COM组件时遇到了问题。错误信息提示为“??Ч??????????”,这表明在尝试访问DLL中的"FPJE"属性时发生了COM异常。这里有几个可能的原因和解决办法:

  1. 类型不匹配或属性不存在:首先确认你尝试访问的属性名“FPJE”是否正确,以及该属性是否确实存在于你调用的COM对象中。有时候,由于大小写敏感性、拼写错误或者版本更新导致属性名称变化,都可能导致这个问题。

  2. 权限问题:确保你的应用程序有足够的权限去访问和操作这个COM组件。在某些环境下,特别是涉及到系统级服务或组件时,权限不足可能会引发这类错误。

  3. COM组件状态:检查COM组件是否已经正确注册并且运行正常。你可以通过系统的“regsvr32.exe”工具来注册或重新注册DLL文件,或者查看Windows事件查看器是否有相关错误日志。

  4. 数据类型转换问题:错误信息虽然没有直接指出,但有时获取属性值时的数据类型不匹配也会导致异常。确保getString()方法与“FPDM”属性实际返回的数据类型相匹配。如果该属性返回的不是字符串类型,需要相应地调整你的代码。

  5. 环境兼容性:确认你的开发环境(如JDK版本、Jacob库版本)与目标COM组件的兼容性。有时候,不同版本的库或JVM可能会有兼容性问题。

  6. 异常处理:增强你的异常处理逻辑,尝试捕获更具体的异常信息。可以使用Dispatch.invoke()方法的重载形式来捕获并打印出更详细的错误信息,这有助于定位问题。

  7. 使用日志记录:在调用前后增加日志记录,包括输入参数、返回值等,以便于分析调用过程中的具体行为。

如果以上步骤不能解决问题,建议联系提供DLL的公司获取技术支持,他们可能能提供更具体的指导或确认是否存在已知的问题及解决方案。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: