无法在windows server 2012中加载DLL

DLL fails to load in windows server 2012

本文关键字:加载 DLL 2012 server windows      更新时间:2023-10-16

我在VS2005中编写的应用程序是一个32位软件。它在Windows服务器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,但没有帮助。

我甚至查看了dependencywalker(我真的是个新手),发现了一些显示为黄色的窗口dll(例如msvcr80.dll)。我把这些复制到我的应用程序文件夹中,但也没有用。

有人能告诉我该如何解决这个问题吗?我应该安装什么版本的可再发行软件,或者一些关于如何使用依赖助行器的提示。请帮助

尝试检查windows事件日志。它位于"控制面板"->"管理工具"->"事件查看器"->"Windows日志"->"应用程序"附近。通常你会在那里看到没有找到的确切DLL,它的预期版本也应该匹配。

是的。如果DLL没有DLLMain函数,LoadLibrary会在Windows Server 2012中以某种方式失败。要解决此问题,您可以使用:

LoadLibraryEx(libraryname, NULL, DONT_RESOLVE_DLL_REFERENCES).

可能无法加载dll,因为出现错误:"试图加载格式不正确的程序。"。使用平台taget"x86"构建的dll在Win 7 x86或x64中运行良好,但在Win 2012 Server x64中不运行。使用平台目标"Any CPU"编译dll

我读到依赖助行器自Windows7以来不再可靠(它给出假阴性)。LoadLibrary失败时,您尝试加载的dll无法加载,或者是依赖dll。

在visual studio中打开项目时,可以暂停LoadLibraryW(文件名)中的调试器;如果可以修改源代码并重新编译,则调用GetLastError()以查找此处建议的确切问题LoadLibraryW()无法在System32中加载DLL。

现在要找出缺少的DLL,您必须使用Windows调试工具GFLAGShttps://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. 然后单击窗口图标并键入"GFLAGS"
  4. 打开"全局标志(X64)-桌面应用程序"
  5. 在"系统注册表"选项卡的"全局标志"对话框中启用显示加载程序快照(第二个条目,顶部)
  6. 重新启动(是的,您必须重新启动!)
  7. 使用解决方案文件打开visual studio
  8. 在调试模式下运行(Win64)
  9. 让应用程序运行错误
  10. 停止应用程序并关闭调试器
  11. 现在在visual studio中,转到"输出"窗格。并选择:显示输出自:"调试"
  12. 检查输出的最后一行。在某个地方会有一个错误的条目。我的阅读:

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

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

在我的例子中,我自己为我正在使用的自定义代码添加了这个库。

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