windows - 双模式可执行吗?

标签 windows exe dos multiplatform

一些历史……我有 3 个系统,一个是 DOS 6.22 系统,一个是 Windows 95 系统,一个是现代 Windows 7(64 位)系统。当我升级到 Win7-64 时,一些我最喜欢的命令行实用程序停止工作,所以我决定自己重新编写它们。我仅有的 2 个编译器是 Borland Turbo C++ 3.0 和 Visual Studio 2008,它们可以很好地构建 2 个版本,一个 DOS 16 位和一个 Windows 7 32 位(我猜也可以构建 64 位。 ) 问题出在我的Win95系统上。 DOS 版本在那里运行良好,但由于我花时间在 Win7 构建中支持 LFN,所以我希望它与我的 Win95 系统一起使用。因此,经过大量研究,我发现并购买了 Visual Studio 6(根据我的研究,最后一个支持 Win95,)复制了代码(当然,必须重写部分),它编译得很好,并且可以工作:)

下次我必须以 DOS 模式启动我的 Win95 系统时,问题就出现了。该程序停止工作(当然),因为未加载 Win95。我真的不想安装该程序的 2 个副本(需要 2 个不同的文件名),所以我希望有一种方法可以将这 2 个版本链接到一个文件中。如果我在 DOS 中执行它,它不会说它需要 windows,它只会跳转到程序的 DOS 部分。这样,它将是一个单独的程序,如果加载了 Win95,则支持 LFN,如果未加载 Win95,则不支持。由于 Win95 版本在 Win7-64 中也能正常工作,它可能还会产生一个适用于所有 3 个系统的单一版本(这将是一个额外的好处。)

我进行了一些网络搜索,但找不到与我要查找的内容相关的任何内容。所以我不知道这是否可能。我可能还得再买一个编译器,但考虑到它的年龄,我可能买得起。不过,我的网络搜索确实得到了一些信息,让我相信它“应该”是可能的。它只需要一个与 Windows 编译器放入的不同的 exe 头。它可能需要我重新编写 32 位的 DOS 版本并使用 DOS 扩展程序(对于保护模式,假设我找不到一种方法来将其包含在文件本身中。)这是可以接受的(虽然不理想。)我宁愿在 DOS 部分中使用 16 位代码,在 Windows 部分中使用 32 位代码(为了最大的兼容性。)

有没有人有这样的信息?如果您能指出正确的方向,我们将不胜感激。

最佳答案

我不知道它是否在 Windows 7 可执行文件中继续存在,但在 Win95 中,可执行文件 (EXE) 实际上有两个入口点——一个是 DOS 会找到的“正常”入口点,另一个是 Windows 会找到的入口点会用。 DOS 入口点通常是一个非常简单的默认值,它只会打印“这是一个 Windows 程序”并退出。您实际上可以覆盖此默认值,并让链接器使用您自己的代码,但它非常有限。

我建议做的是向您的 DOS 6.22 版本(例如“sed”)添加逻辑,以检查操作系统级别,如果它符合正确的标准,则将参数传递给第二个可执行文件(例如“sedx” ) 使用“较新”操作系统的功能。

关于windows - 双模式可执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22975451/

相关文章:

android - 从同一网络中的 Linux PC Ping/连接同一网络中的 Windows PC

使用 fgetc/getc 后无法写入文件 (Windows)

c# - 申请流程不会关闭

c# - 如何跨越多个程序集的 C# 命名空间?

windows - MS-dos FAT32格式和windows FAT32格式有什么区别

assembly - 从 A 到 Z 打印的 8086 汇编语言程序

c# - 将存储为 XML 字符串的 SVG 图像作为 image/svg+xml MIME 类型复制到 Windows 剪贴板

windows - 是否可以使用特殊字符来表示 Windows 中的空格?

php - 在apache服务器上运行exe文件

c程序图形错误