3

我有一个 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 机器上工作。它显示错误:“无法在动态链接库 msvcrt.dll 中找到入口点 memmove_s”。

我发现可能存在问题出在 WindowsCodec DLL 中(clear XP SP2 安装中没有这样的 DLL,但它在带有 Visual Studio 的 XP SP2 的 Windows/system32 文件夹中)所以我将它复制到了 clear 系统上的应用程序文件夹中。之后程序部分工作(启动后启动另一个应用程序)但没有显示启动画面图像。

安装 Microsoft Visual C++ Redistributable Package(2008 和 2010)没有帮助。

我发现了在 Visual Studio 中使用静态链接的建议(项目属性中的多线程 (/MT)选项 -> C/C++ -> 代码生成),但它也没有帮助。

我也尝试过 DependencyWalker,但找不到两个测试系统的依赖项有任何差异。

任何人都知道为什么会发生这种情况?我是 C++ 的新手,希望这是我不知道的显而易见的事情......

4

2 回答 2

3

您的程序依赖于 .NET 框架,至少是 3.0 版。默认情况下,这在 XP SP2 安装中不可用。如果您没有看到 windowscodecs.dll,那么您没有安装正确版本的 .NET。这在您安装 VS2008 时确实有效,因为它还安装了 .NET。

下载地址在这里

于 2012-04-09T12:05:29.280 回答
1

C++ 程序依赖于编译它的 crt 库的特定版本。如果正在运行的系统在本地程序目录或系统 WinSxS 目录中没有该版本。这是使用 VS 2005 或 2008 编译的 C++ 程序的特定问题。有关更多信息,请参见此处:http ://en.wikipedia.org/wiki/Side-by-side_assembly

如果您使用 VS 2010,您可能会看到这个问题消失了,因为它使用不同的方法来解决依赖关系。

于 2012-04-09T14:45:58.580 回答