【发布时间】:2014-10-27 08:25:24
【问题描述】:
我用 VS2005 编写的应用程序是 32 位软件。它在 Windows Server 2008、Windows 7(64 位)上运行良好,但不能在 Windows Server 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,但没有帮助。
我什至查看了dependency walker(我对它真的很陌生)并确实找到了一些以黄色显示的Windows dll(例如msvcr80.dll)。我将它们复制到我的应用程序文件夹中,但也没有用。
有人可以就我应该如何解决这个问题提供任何想法吗?我应该安装什么版本的 redistributable 或者一些关于如何使用依赖 walker 的提示。请帮忙
【问题讨论】:
-
该错误不暗示缺少 DLL 作为原因。您的程序使用的 DLL 之一有一个返回 FALSE 的 DllMain() 入口点。您的问题中没有任何线索可以说明为什么会出现这种情况,您需要一个调试器。
-
我已经用代码编辑了我的问题。给出的错误在 LoadLibrary 中,这就是我返回 false 的地方。 dll 确实存在 - 我已经检查过了。
-
好吧,那么您应该能够确定哪个 DLL 是麻烦制造者。您加载的是第一个候选者,它可能是它使用的 DLL。如果您没有它的来源,请致电程序员寻求帮助。
-
还在挣扎。该控件没有到达它使用的 DLL 的构造函数。同一套代码在windows 2008 server 中运行,是不是可能缺少一些windows dll?
-
CLR支持意味着:需要安装.NET Framework。