简体   繁体   English

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

[英]the module “ntvinv.dll” was loaded but the entry-point DLLRegisterServer was not found

I have an application which was working fine till windows 2003 server. 我有一个应用程序,正常工作,直到Windows 2003服务器。 Recently we migrated to Windows server 2012 R2 64-bit. 最近我们迁移到Windows服务器2012 R2 64位。 Since we migrated to 64-bit windows, we also migrated to 64-bit JAVA. 由于我们迁移到64位窗口,我们还迁移到64位JAVA。

The problem is: Initially we got error saying 32-bit ntvinv.dll "Can't load IA 32-bit .dll on a AMD 64-bit platform" so we downladed the 64-bit version of ntvinv.dll from jIntegra's web sit. 问题是:最初我们得到错误说32位ntvinv.dll“无法在AMD 64位平台上加载IA 32位.dll”所以我们从jIntegra的网站下载了64位版本的ntvinv.dll 。 Now we are facing a different problem all together where we are not able to register the DLL itself. 现在我们面临着一个不同的问题,我们无法注册DLL本身。 Insted we get error pop-up saying the "ntvinv" Resource DLL not found errno=[126] and the log file reads Insted我们得到错误弹出窗口说“ntvinv”资源DLL找不到errno = [126]并且日志文件读取

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

When i try to register the DLL manually i get following error 当我尝试手动注册DLL时,我得到以下错误

the module "ntvinv.dll" was loaded but the entry-point DLLRegisterServer was not found 模块“ntvinv.dll”已加载但未找到入口点DLLRegisterServer

Make sure that "ntvinv.dll" is a valid DLL or OCX file and then try again. 确保“ntvinv.dll”是有效的DLL或OCX文件,然后重试。

Can any one please help me resolve the issue? 任何人都可以帮我解决这个问题吗?

EDIT: I ran dependency walker on the said DLL and found following 编辑:我在上述DLL上运行依赖walker,发现如下

在此输入图像描述

A point to note: We have exact same set-up on two different machine(lets say machine A and machine B). 需要注意的一点是:我们在两台不同的机器上设置完全相同的设备(比如机器A和机器B)。 On one of the machines it works fine where as on other i get the above mentioned errors with the DLL. 在其中一台机器上它可以正常工作,而在另一台机器上我得到了DLL的上述错误。 When i run dependency walker on both the machines i get exact same snap shot as pasted above. 当我在两台机器上运行依赖性walker时,我得到与上面粘贴的完全相同的快照。

Any more help in this regards will be really appreciatied. 在这方面的任何更多帮助将非常值得赞赏。 I am a new bee to the DLL world. 我是DLL世界的新蜜蜂。

Edit 2: One more observation.. I see few Visual C++ and Visual Studio runtimes on the machine where the DLL works fine and not on the machine where it does not work.. could this be the reason? 编辑2:还有一个观察结果..我在DLL上工作正常的机器上看到很少的Visual C ++和Visual Studio运行时,而不是在它不起作用的机器上。这可能是原因吗?

The error is cleanly spelled out here: 错误在这里清楚地说明:

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

One or more missing DLL dependencies are missing in order to load ntvinv.dll. 为了加载ntvinv.dll,缺少一个或多个缺少的DLL依赖项。

Run dumpbin.exe /imports ntvinv.dll to find out what DLLs are implicitly linked. 运行dumpbin.exe /imports ntvinv.dll以找出隐式链接的DLL。 Dumpbin.exe is a tool typically installed by Visual Studio. Dumpbin.exe是Visual Studio通常安装的工具。 But it probably comes bundled with the Windows Platform SDK . 但它可能与Windows Platform SDK捆绑在一起。

You can also use Depends.exe to get similar information. 您还可以使用Depends.exe获取类似信息。

I think the windows event viewer may also report the dependent dll in either the Application or System logs that caused the binary to fail to load. 我认为Windows事件查看器也可能在应用程序或系统日志中报告导致二进制文件无法加载的依赖dll。 Go reproduce the error, then check the event logs. 去重现错误,然后检查事件日志。

My hunch tells me that it's a version of the MSVCRT that is not installed. 我的预感告诉我,它是未安装的MSVCRT的一个版本。

Add this to your main or in the constructor. 将其添加到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);
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM