【发布时间】:2012-04-09 22:45:58
【问题描述】:
我有一个 C++ 程序。这很简单 - 显示图像(启动屏幕)并启动另一个应用程序,然后在启动另一个应用程序时关闭。实际上,这个:http://www.olsonsoft.com/blogs/stefanolson/post/A-better-WPF-splash-screen.aspx 有非常小的变化(我的初始屏幕图像和我的程序已启动,而不是示例之一)。
它在我的 Windows 7 开发者机器上运行良好。它还可以在安装了 Windows XP SP2 和 Visual Studio 2008 的另一台(虚拟)机器上运行。但它不能在没有 Visual Studio 的同一台虚拟 Windows XP SP2 机器上工作。显示错误:“Entry point memmove_s could not be located in the dynamic link library msvcrt.dll”。
我发现 WindowsCodec DLL 可能存在问题(在明确的 XP SP2 安装中没有这样的 DLL,但它在带有 Visual Studio 的 XP SP2 的 Windows/system32 文件夹中)所以我将它复制到了应用程序文件夹中系统。之后程序部分工作(启动后启动另一个应用程序),但没有显示初始屏幕图像。
安装 Microsoft Visual C++ Redistributable Package(2008 和 2010)没有帮助。
我找到了在 Visual Studio 中使用静态链接的建议(Multi Threaded (/MT) 项目属性中的选项 -> C/C++ -> 代码生成),但它也没有帮不上忙。
我也尝试过 DependencyWalker,但在两个测试系统的依赖项中找不到任何差异。
有人知道为什么会发生这种情况吗?我是 C++ 的新手,希望这是我不知道的显而易见的事情......
【问题讨论】:
-
在您的可执行文件上运行
depends并找出它为什么需要该 DLL。 -
也许使用像 Qt 这样的跨平台工具包可能是值得的......
-
你是说 DependencyWalker 吗?我已经尝试过了,但不明白为什么它可以在带有 Visual Studio 的系统上工作,但没有它就不能工作。依赖项看起来完全一样,缺少依赖项和缺少函数的依赖项。
-
@BasileStarynkevitch 不幸的是,我没有 C++ 经验,因此我无法重写程序。希望它只需要一些配置...
-
@BasileStarynkevitch:即使您使用跨平台工具包,您的程序仍将依赖于特定于平台的组件。用msvc编译Qt,你的程序会依赖VC redist x86,不安装就无法运行。
标签: c++ visual-studio winapi windows-xp