2

可能重复:
在 Windows 2000 中使用 Visual Studio 2010 编译的 C++ DLL 时出现问题

与这些问题类似:
 我可以将 Visual Studio 2010 的 C++ 编译器与 Visual Studio 2008 的 C++ 运行时库一起使用吗?
 VS2010 可以创建在 Windows 2000 下运行的本机可执行文件吗?


我有 C++ 代码,我在 WinXP 机器上使用 VS2010 (CL 版本 16.00.30319.0)从命令行(使用CL.EXE )编译,但我希望生成的本机(x86)可执行程序在 Win2000、WinXP 上运行, ETC。

旧版本的 CL(VC98,版本 12.00.8186)可以很好地完成这项工作,但是 VS2010 版本会生成一个可执行文件,在 Win2000 上运行时会导致弹出错误:

foo.exe不是有效的 Win32 应用程序

解决方案必须采用CL 编译器链接器选项的形式,而不是 VisualStudio 设置或属性。我不需要任何较新的 C++ 语言功能,因为代码已经有几年历史了,并且可以移植到其他操作系统,而且我只需要本机代码(x86,而不是 .NET 或 CLI)可执行文件。

(有关示例,请参见http://david.tribble.com/src/crlf.cpphttp://david.tribble.com/src/detab.cpp。)

我想我可以在我的新开发环境(WinXP,最终是 Windows 7)上继续使用旧的编译器(VS 9.0),但这似乎不是一个理想的解决方案。当然,MS 仍然提供了一种方法来创建向后兼容旧但仍然存在的 Windows 操作系统的本机可执行文件?

4

1 回答 1

2

您的错误“foo.exe 不是有效的 Win32 应用程序”可以通过使用 editbin 将 PE 标头中的“最低操作系统版本”字段设置为 0x0500 (Windows 2000) 来修复。

EDITBIN /VERSION:5,0 foo.exe

为此,您需要一个旧版本的 editbin 或第三方工具,因为新版本会“检查”您提供的版本。

在此之后,应用程序将加载,但它可能会开始抱怨 kernel32.dll 中缺少函数。

您链接到的比利的问题将使您陷入比任何理智的程序员都想去的兔子洞更远的地方。

于 2011-05-22T17:39:52.973 回答