DLL无法在Windows Server 2012中加载

时间:2014-10-27 08:25:25

标签: c++ windows dll

我在VS2005中编写的应用程序是一个32位软件。它在Windows Server 2008,Windows 7(64位)上运行良好,但不能在Windows服务器2012上运行。我试图找出哪个DLL丢失,因为我从LoadLibrary收到错误"动态链接库(DLL)初始化例程失败"。给出错误的代码如下

m_plugin = LoadLibrary( pluginPath.c_str() );
if ( !m_plugin )
{
    const string error( "Failed to load Library \"" + pluginPath + "\" " +  GetLastErrorStdStr() );
    CBLogger::log( error, HIGH_IMPORTANCE );
    return false;
}

要解决此问题,我已尝试安装C ++可再发行版本8.0.61001,但它没有帮助。

我甚至看过依赖性walker(我真的很新),并且发现了一些以黄色显示的Windows dll(例如msvcr80.dll)。我将它们复制到我的应用程序文件夹中,但这也无效。

有人可以就如何解决这个问题提出任何想法吗?我应该安装什么版本的可再发行组件或者有关如何使用依赖性walker的一些提示。请帮忙

3 个答案:

答案 0 :(得分:1)

尝试检查Windows事件日志。它位于控制面板周围 - >管理工具 - >事件查看器 - > Windows日志 - >应用。通常你会看到那些在预期版本中找不到的确切DLL也应该匹配。

答案 1 :(得分:0)

可能无法加载dll,因为错误:"尝试加载格式不正确的程序。"。 一个dll构建平台taget" x86"在Win 7 x86或x64中正常工作但不能在Win 2012 Server x64中工作。 使用平台目标编译dll"任何CPU"

答案 2 :(得分:0)

我读到自Windows 7以来依赖性walker不再可靠(它给出了漏报)。当LoadLibrary失败时,您尝试加载的DLL无法加载或依赖dll。

在visual studio中打开项目时,可以在LoadLibraryW(Filename)暂停调试器;如果您可以修改源代码并重新编译,请调用GetLastError()以找出确切的问题作为建议LoadLibraryW() failing to load DLL in System32

现在要找出缺少哪个DLL,您必须使用Windows调试工具GFLAGS https://msdn.microsoft.com/en-ca/library/windows/hardware/ff549557(v=vs.85).aspx。 GFlags包含在Windows调试工具中(我不知道从哪里获取Windows调试工具。也许试试https://developer.microsoft.com/en-us/windows/downloads/windows-8-1-sdk)。 不幸的是,没有人写下一本好的手册如何使用它。所以这些是步骤:

  1. 假设安装了Windows 10(64位),并安装了Windows调试工具。
  2. 安装SDK后,重新启动
  3. 然后点击Windows图标并输入' GFLAGS'
  4. Open" Global Flags(X64) - Desktop App"
  5. 在" Global Flags"中启用Show loader snaptte; "系统注册表" -tab(第二个条目,topleft)
  6. 中的对话框
  7. 重启(是的,你必须重启!)
  8. 使用您的解决方案文件打开visual studio。
  9. 以调试模式(Win64)
  10. 运行它
  11. 让应用程序运行错误
  12. 停止应用程序并关闭调试程序
  13. 现在在visual studio中,转到“输出”窗格。并选择:显示输出:" Debug"
  14. 检查输出的最后一行。在某处会有一个带有ERROR的条目。我看了:

    14b0:15ec @ 00131328 - LdrpSearchPath - RETURN:状态:0xc0000135 14b0:15ec @ 00131328 - LdrpProcessWork - 错误:无法加载DLL:" clAmdFft.Runtime.dll",父模块:" C:\ Users \ steven \ Documents \ Unreal Projects \ Revaro 4.11 \ Binaries \ Win64 \ UE4Editor-Revaro.dll",状态:0xc0000135 14b0:15ec @ 00131328 - LdrpLoadDllInternal - RETURN:状态:0xc0000135 14b0:15ec @ 00131328 - LdrLoadDll - RETURN:状态:0xc0000135 ' UE4Editor.exe' (Win32):已卸载' C:\ Windows \ System32 \ mfreadwrite.dll'

  15. " clAmdFft.Runtime.dll"这是给出问题的DLL。安装它,文件路径有效并在项目中配置,确保它没有损坏,并且版本正确x86 / x64。

    在我的情况下,我自己添加了这个库,用于我正在使用的自定义代码。

    现在再次禁用GFLAGS,因为它会降低计算机速度并重新启动。