基本上,当我们的软件在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}}个机器,两者都完全打了补丁。
有什么想法吗?!
我开始用尽可靠的想法了。 :(
答案 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的依赖关系。