Microsoft Word for Windows 1.1a 原生 x64 移植版
本项目是 Microsoft Word for Windows 1.1a 的完整原生 Windows x64 移植版本,其历史代号为 Opus。它在原始 Word 源码和资源的基础上,用现代实现替换了原有的 16 位汇编、分段内存以及 Win16 平台相关的部分。
最终得到的是以 64 位 Windows 可执行文件形式运行的原版 Word 应用程序和用户体验。这不是模拟器,也不是用现代编辑器控件重新实现的版本。
环境要求
- 64 位 Windows
- Visual Studio 2022,并安装 使用 C++ 的桌面开发
- 通过 Visual Studio 安装的 Windows 10 或 Windows 11 SDK
- CMake 3.25 或更高版本
- PowerShell
构建与运行
克隆仓库,配置内置的 CMake preset,然后在 PowerShell 中执行构建:
git clone https://github.com/jmarshall23/msword.git Set-Location msword\src cmake --preset x64-debug cmake --build --preset x64-debug & ..\bin\WORD1.exe
如需构建优化版本,请改用 release preset:
cmake --preset x64-release cmake --build --preset x64-release & ..\bin\WORD1.exe
这些 preset 使用 Visual Studio 2022 x64 生成器。配置完成后,生成的解决方案也可以直接从 out\MicrosoftWordX64Port.sln 打开,将 WORD1 设为启动项目即可。
测试
在仓库根目录下运行完整的 Debug 测试套件:
ctest --test-dir .\out -C Debug --output-on-failure
如果当前目录已经是 src,则:
ctest --test-dir ..\out -C Debug --output-on-failure
对于 release 构建,将 Debug 替换为 Release。测试套件覆盖了移植后的 x64 运行时、原始 Word 的数据结构与命令表、进程启动流程,以及包括键入、选择、格式化、对话框和保存操作在内的自动化 UI 流程。
项目结构
| 路径 | 用途 |
|---|---|
src/Opus/ |
原始的 Microsoft Word/Opus 应用程序源码和资源 |
src/OpusEtAl/ |
原始的配套工具、库以及构建输入 |
src/OpusProg/ |
历史项目文档 |
src/port/original/ |
x64 兼容层、转换后的例程以及测试 |
src/port/tools/ |
用于替代历史构建工具的原生实现 |
src/cmake/ |
资源与源代码生成辅助工具 |
out/ |
CMake 缓存以及生成的 Visual Studio 解决方案 |
build/ |
中间工具、测试、探针、PDB 以及诊断产物 |
bin/ |
最终的可执行文件及运行时文件 |
out、build 和 bin 在配置和编译过程中于本地生成。
移植的工作原理
原始的 C 与资源文件仍然是权威实现,移植仅补充了让这些代码在 64 位 Windows 上安全构建和运行所需的平台层内容:
- 16 位 x86 汇编入口点被转换为定长 C 或 C++ 代码。
- 分段及双间接内存句柄被映射到一套 x64 安全的原生运行时。
- Win16 特有的启动、消息、图形、文件以及资源行为被适配到当前的 Win32 API。
- 原始的命令、对话框、光标、位图等生成资源由原生宿主工具作为 CMake 构建图的一部分重新生成。
- 单元、运行时、冒烟以及 UI 测试确保与原算法和应用行为兼容。
CMake 会枚举遗留的汇编目录,但不会将这些模块编译进原生目标。这样既保留了历史实现以供参考,又确保所有交付的代码都对 AMD64 有效。
常用目标
| 目标 | 说明 |
|---|---|
WORD1 |
原生 x64 的 Microsoft Word 可执行文件 |
opus_original_engine |
为 x64 编译的原始 Word 应用引擎 |
opus_x64_runtime |
原生运行时及转换后的汇编行为 |
opus_word1_ui_test |
自动化端到端 UI 测试驱动 |
legacy_sources |
在 IDE 中可见的原始汇编参考集合 |
使用以下命令构建指定目标:
cmake --build --preset x64-debug --target WORD1
贡献
改动应在保留 Word 原有行为的同时,确保所有原生接口的指针宽度安全。优先采用与源码语义等价的翻译方式重写历史例程,将不可避免的 Windows API 适配隔离在移植边界处,并为新翻译的行为添加针对性的测试。
版权
历史源码文件保留了原始的微软及第三方版权声明。本仓库目前尚未包含顶层许可证文件,在再分发源码或二进制文件之前,请先查阅相应的权利许可。