【问题标题】:Jacob 1.14.3 DLL no detected by the java.libary.path using Eclipse使用 Eclipse 的 java.library.path 未检测到 Jacob 1.14.3 DLL
【发布时间】:2018-08-24 16:25:05
【问题描述】:

我正在尝试实现库 JACOB 以与某些支付设备(例如 PINPAD)进行通信。我创建了一个 java 项目,但是当主类执行在运行时使用 DLL 的方法时会报错 no jacob-1.14.3-x64 in java.library.path

在这里你可以找到我用来构建项目的东西:

  • 操作系统:Windows 10 64bit
  • JRE/JDK 版本:1.8.0_181 64bit*(从 32 更改为 64bit)*
  • Eclipse:光子发布 (4.8.0)
  • Maven 版本:3.5.4
  • JACOB 版本:1.14.3(文件 64[x64] 和 32[x86])

在这里你可以找到我已经尝试过的解决方案


mvn install:install-file -Dfile=C:\Users\adazat\Downloads\ClienteImplantadoJava\jacob-1.14.3\jacob-1.14.3-x64.dll -DgroupId=jacob -DartifactId=jacob-dll -Dversion=1.14.3 -Dpackaging=dll -DgeneratePom=true


mvn install:install-file -Dfile=C:\Users\adazat\Downloads\ClienteImplantadoJava\jacob-1.14.3\jacob.jar -DgroupId=jacob -DartifactId=jacob-jar -Dversion=1.14.3 -Dpackaging=jar -DgeneratePom=true

  • 添加依赖到maven pom.xml

我在 stack-overflow 中搜索了不同的问题,但尝试任何方法仍然无效,我想知道是否有人有类似的问题,我还可以尝试什么来解决它。我真的很感谢你的时间:D

【问题讨论】:

  • 您是否在使用 64 位版本的 Jacob DLL 和 64 位版本的 Java,最好是在 64 位 Windows 上?也许你混淆了版本。
  • @KarolDowbecki 感谢您注意到这一点,我已经编辑了问题并添加了我正在使用的 dll 类型和 Windows 架构。这是64位
  • 你的 JDK 是什么? 32 位还是 64 位?还请补充一点,因为您无法从 32 位 Java 访问 64 位 Dll....
  • 哇 @Lonzak 这可能是问题所在,我将尝试下载 64 位版本的 JDK,因为目前我正在使用 32 位版本。

标签: java eclipse maven dll jacob


【解决方案1】:

仅供参考,您的初始问题:切换到 64 位 JDK,因为无法从 32 位 jre/jdk 调用 64 位 dll。

关于你的下一个错误:

无法共同创建对象

在使用 COM 对象之前,它必须在系统中注册(例如,它的 CLSID 或 ProgID 必须存在于 Windows 注册表中)。如果未注册,则可以使用 regasm.exe 实用程序来执行此操作:

使用:Regsvr32 PathToDll

或者你也可以试试:%systemroot%\Microsoft.NET\Framework64\vX.X\RegAsm.exe /verbose /nologo /codebase PINPAD.dll

(将 vX.X 替换为您系统上安装的版本,例如 v3.0 或 v4.0.30319。如果您想使用 32 位 dll,请使用 ...\Framework\... 而不是 ...\Framework64\...

一旦注册了CoCreateInstance() API 方法,就可以用来获取对对象公开的接口的引用并调用它的方法。更多细节可以在here找到。

【讨论】:

  • 是的,没错,我做到了,我注册了 Dll。但由于某种原因,我不得不将 JDK 和 JRE 也从 64 位更改为 32 位,并指向 32 位 Dll 版本。谢谢 :D 的帮助。
  • 是的,如果您的 pinpad.dll 是 32 位,这将是有意义的。然后当然你需要使用 jacob32 位版本,可能还需要 32 位 jdk。 Alltough 64Bit jdk 也应该可以工作......
【解决方案2】:

您必须验证java.library.path 是否正确。

我在写-Djava.library.path="C:\Users\adazat\Downloads\ClienteImplantadoJava\jacob-1.14.3\";-Djava.library.path=C:\Users\adazat\Downloads\ClienteImplantadoJava\jacob-1.14.3\; 你必须确保你没有使用

  • "" 包围路径
  • 最后
  • 这应该是路径末尾的 \ 以表明这是一个包含 dll 的文件夹。

解决后,现在执行程序时出现以下错误。

com.jacob.com.ComFailException: Can't co-create object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多