0

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

但是,当在一个机器上运行相同的软件XP(最新补丁)时,调用LoadLibrary失败,返回NULL,并带有指定module not found.

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

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

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

奇怪的是,这段代码在VS 2008 SP2.

当客户端机器是Windows 7.

仅当它被编译+链接VS 2010并且在客户端上运行时才会失败XP

我完全不知道世界上可能出了什么问题。

为炖菜添加怪异:

如果我XP VM在我的开发箱上启动并在 debug build inVS2010下运行此代码XP,它可以正常工作!

事实上,在 my 下XP VM,标准(发布)构建也可以正常运行!!!

只是当从一个真正的盒子运行时它才会失败(到目前为止, XP我已经尝试了几台机器,都已完全修补)。XP

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

4

3 回答 3

2

你说你已经确保路径名是可访问的......你有没有尝试将 dll 的目录添加到 PATH 环境变量中只是为了看看它是否有效?这样您就可以确认它只是未能找到并尝试从那里解决问题。

我最近刚刚在自己的项目中遇到了这个问题。我什至尝试指定 LoadLibraryA 的完整文件路径,它返回了该错误代码。问题是 LoadLibrary 试图查找我正在加载的 DLL 的依赖 DLL 的搜索路径问题。因此,也许您的资源 DLL 也有一些 LoadLibrary 不知道如何访问的 DLL。

于 2011-01-28T18:48:54.613 回答
2

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

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

你有没有可能在你的 XP 虚拟机上安装了 VS2010 运行时库,而不是在其他 XP 平台上?

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

于 2011-01-28T19:00:42.453 回答
1

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

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

于 2011-01-28T19:26:36.603 回答