通过 Java 在 ActiveX 控件 (.ocx) 中发出调用方法
Posted
技术标签:
【中文标题】通过 Java 在 ActiveX 控件 (.ocx) 中发出调用方法【英文标题】:Issue calling method in ActiveX Control (.ocx) via Java 【发布时间】:2015-08-11 18:30:14 【问题描述】:我的最终目标是从我的 Java 应用程序中的指纹扫描仪获取 JPG。我不需要做任何识别或登录。
我有一个Topaz IDGem LCD 1x5 签名板/指纹扫描仪。他们为设备的指纹扫描仪部分提供的 SDK 称为SigIDp1。问题是它只能作为 ActiveX 控件使用。
我对 ActiveX 几乎一无所知。根据我的研究,我似乎需要一个 Java 到 COM 的桥来通过 Java 与 ActiveX 控件进行交互。 JACOB 项目似乎是最知名的。我的问题是我似乎无法使用这个特定的 ActiveX 控制文件。
我的超高级 Java 程序如下所示:
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
public class JacobTest
public static void main(String[] args)
Dispatch test = new ActiveXComponent("SigIDp.SigIDp1");
Dispatch.call(test, "CreateJpg");
问题是当我尝试创建新的 ActiveXComponent 对象时,我收到了com.jacob.com.ComFailException: Can’t co-create object
错误。根据this page,看起来这与 .ocx 文件未正确注册有关。但是,我不能使用引用的 .NET 工具(即RegAsm.exe
)来注册控件,因为我收到一条错误消息,指出它不是有效的 .NET 程序集。而且,当我使用regsvr32.exe
注册它时,注册似乎成功了,但我仍然收到无法共同创建的错误(我在 System32 和 SysWOW64 中尝试过regsvr32.exe
)。
说了这么多,我很困惑。我愿意接受任何有助于我实现最终目标的建议,即使它是使用更友好的硬件重新开始(尽管我很难找到任何带有免费 Java SDK 的指纹扫描仪)。
【问题讨论】:
我在调用 ActiveX 控件的方法时遇到了同样的问题。 com.jacob.com.ComFailException:遇到 COM 异常:在调用时:连接描述:8000ffff / 灾难性故障 不幸的是,我不知道这个错误是什么意思。发布自己的新问题可能会更好。 感谢您的反馈。经过一番研究,我知道问题不在于 JACOB 方法。自定义控件(用 C++ 开发)不兼容(我猜)。相同的方法适用于使用不同技术 (VB6) 开发的另一个控件。 【参考方案1】:对于其他偶然发现此问题的人:
事实证明,这毕竟是一个架构问题。有问题的 ActiveX 控件似乎只能以 32 位形式提供。因此,我曾经尝试注册哪个版本的regsvr32.exe
并不重要,因为(据我所知)在 64 位 JRE 中运行的应用程序无法与 32 位 ActiveX 控件交互。
对我来说,“解决方案”是为我的项目使用 32 位 JRE。这并不理想,但至少我现在正在前进。
【讨论】:
以上是关于通过 Java 在 ActiveX 控件 (.ocx) 中发出调用方法的主要内容,如果未能解决你的问题,请参考以下文章