C ++:我们的安装程序拒绝加载应用程序的资源DLL(找不到模块)[仅限XP]

时间:2011-01-28 18:42:00

标签: c++ visual-studio loadlibrary

基本上,当我们的软件在Windows 7下运行时,它可以工作:对LoadLibrary()的调用成功,生活也很好。

但是当在XP框(最新补丁)上运行相同的软件时,对LoadLibrary的调用失败,返回NULL,错误代码指定module not found }。

我已尝试强制它为我们的应用使用UNICODE版本LoadLibraryW而不是LoadLibraryA版本。

我已尝试确保通过本地驱动器号映射安装文件夹。

我已经验证了路径名实际上可以从执行机器访问(即产生的错误指示它尝试加载的路径,并且我使用该字符串来实际查找文件)。

奇怪的是,这个代码在VS 2008 SP2上编译时运行正常。

当客户端计算机为Windows 7时,它也可以正常工作。

只有在VS 2010编译+链接并且在XP客户端上运行时才会失败。

我完全不知道世界上会出现什么问题。

为炖菜添加奇怪之处:<​​/ p>

如果我在我的开发框中启动我的XP VM并在VS2010 XP下的XP中的调试版本中运行此代码,它可以正常工作!

事实上,在我的VM XP下,标准(发布)版本也能正常运行!

从真正的XP框中运行它失败了(到目前为止,我已经尝试了几台{{1}}个机器,两者都完全打了补丁。

有什么想法吗?!
我开始用尽可靠的想法了。 :(

3 个答案:

答案 0 :(得分:2)

你说你已经确定路径名是可访问的...你是否尝试将dll的目录添加到PATH环境变量中以查看它是否有效?通过这种方式,您可以确认它无法找到并尝试从那里解决问题。

我最近刚刚在自己的项目中遇到过这个问题。我甚至尝试为LoadLibraryA指定一个完整的文件路径,并返回该错误代码。问题是LoadLibrary试图找到我正在加载的DLL的依赖DLL的搜索路径问题。所以也许你的资源DLL也有一些DLL,LoadLibrary不知道怎么去。

答案 1 :(得分:2)

我会检查您的工具集和平台组合之间的差异。

例如,VS2008与VS2010的区别不如您正在使用的SDK重要。不同的SDK可能针对不同的msvc运行时库。

您是否有可能在XP VM上安装VS2010运行时库而不是其他XP平台?

您也可以在非工作平台上尝试'depends'实用程序来确定缺少的依赖项。

答案 2 :(得分:1)

另一个常见问题是当你加载“a.dll”时,它依赖于“b.dll”。如果“b.dll”出现问题,您有时会收到失败,表明无法加载“a.dll”。这是真的,但没有帮助。

有几个应用程序可以告诉你dll的依赖关系。