模块" ntvinv.dll"已加载但未找到入口点DLLRegisterServer

时间:2015-02-16 08:06:26

标签: java windows dll system32

我有一个应用程序,它工作正常,直到Windows 2003服务器。最近我们迁移到Windows服务器2012 R2 64位。由于我们迁移到64位窗口,我们还迁移到64位JAVA。

问题是: 最初我们得到错误说32位ntvinv.dll“无法在AMD 64位平台上加载IA 32位.dll”所以我们从jIntegra的网站上下载了64位版本的ntvinv.dll。现在我们面临着一个不同的问题,我们无法注册DLL本身。 Insted我们得到错误弹出窗口说“ntvinv”资源DLL未找到errno = [126]并且日志文件读取

线程“main”中的异常java.lang.UnsatisfiedLinkError:D:\ XXXX \ lib \ ext \ ntvinv.dll:动态链接库(DLL)初始化例程失败             at java.lang.ClassLoader $ NativeLibrary.load(Native Method)             at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)             在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)             在java.lang.Runtime.loadLibrary0(Runtime.java:823)             在java.lang.System.loadLibrary(System.java:1028)

当我尝试手动注册DLL时,我收到以下错误

模块“ntvinv.dll”已加载,但未找到入口点DLLRegisterServer

确保“ntvinv.dll”是有效的DLL或OCX文件,然后重试。

任何人都可以帮我解决这个问题吗?

编辑: 我在上述DLL上运行了依赖walker并找到了

enter image description here

需要注意的一点: 我们在两台不同的机器上进行了完全相同的设置(比如机器A和机器B)。在其中一台机器上它可以正常工作,而在另一台机器上我得到了DLL的上述错误。当我在两台机器上运行依赖步行器时,我得到与上面粘贴完全相同的快照。

在这方面的任何更多帮助将非常值得赞赏。我是DLL世界的新蜜蜂。

编辑2: 还有一个观察结果..我在DLL上工作正常的机器上看到很少的Visual C ++和Visual Studio运行时,而不是在它不起作用的机器上..这可能是原因吗?

2 个答案:

答案 0 :(得分:0)

这里错误地说明了错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\XXXX\lib\ext\ntvinv.dll

为了加载ntvinv.dll,缺少一个或多个缺少的DLL依赖项。

运行dumpbin.exe /imports ntvinv.dll以找出隐式链接的DLL。 Dumpbin.exe是Visual Studio通常安装的工具。但它可能与Windows Platform SDK捆绑在一起。

您还可以使用Depends.exe获取类似信息。

我认为windows event viewer也可能会报告导致二进制文件无法加载的应用程序或系统日志中的从属dll。去重现错误,然后检查事件日志。

我的预感告诉我它是未安装的MSVCRT的一个版本。

答案 1 :(得分:0)

将此添加到您的main或构造函数中。

try {
      System.loadLibrary("ntvinv");
  } catch (UnsatisfiedLinkError e) {
      e.printStackTrace();
      JOptionPane.showMessageDialog(null, "The JIntegra dll (ntvinv.dll) is not in the system path .", "Warning", JOptionPane.ERROR_MESSAGE);
      //System.exit(0);
  }