通过 Java 在 ActiveX 控件 (.ocx) 中发出调用方法

Issue calling method in ActiveX Control (.ocx) via Java

我的最终目标是从我的 Java 应用程序中的指纹扫描仪获取 JPG。我不需要做任何识别和登录。

我有一个Topaz IDGem LCD 1x5 signature pad / fingerprint scanner. The SDK they provide for the fingerprint scanner part of the device is called 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 控件似乎只能以 32 位形式提供。因此,我曾经尝试注册哪个 regsvr32.exe 版本并不重要,因为(据我所知)64 位 JRE 中的应用 运行 无法与 32 位交互ActiveX 控件。

对我来说,"solution" 是为我的项目使用 32 位 JRE。这并不理想,但至少我现在在前进。