Remove ATL dependency so VC++ Express can build

The Express editions of Visual C++ ship without ATL. The only ATL usage was
in MUNGA_L4/L4APP.cpp (atlbase.h/atlconv.h + USES_CONVERSION/W2A macros, all
in that one file) for wide-to-ANSI conversion of command-line arguments.

- Replace the ATL includes with a self-contained L4WideToAnsi helper (a
  WideCharToMultiByte wrapper) and local USES_CONVERSION/W2A macros that
  reproduce ATL's W2A semantics. All call sites consume the result immediately
  (stricmp / CString assignment / atoi / atol), so behaviour is unchanged.
- Set UseOfATL="0" in Munga_L4.vcproj, RP_L4.vcproj and their VS2008 variants.
- Document the Express build path and the confirmed June 2010 DirectX SDK in
  BUILD.md (new section 6) and docs/BUILD-NOTES.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-01 09:30:08 -05:00
co-authored by Claude Opus 4.8
parent 2229f154d1
commit f849415c02
7 changed files with 103 additions and 14 deletions
+28 -3
View File
@@ -12,9 +12,9 @@ You must supply the toolchain — none of it is checked into this repo.
| Component | Required version | Notes |
|-----------|------------------|-------|
| **Visual Studio** | 2005 (v8) or 2008 (v9) | Project files are the legacy `.vcproj` format. Modern MSBuild **cannot** build `.vcproj` directly — it needs `VCBuild.exe`, which only ships with VS 2005/2008. A newer VS (2022) can build these but will first *upgrade* the projects to `.vcxproj`. |
| **DirectX SDK** | March 2009 (June 2010 also works) | Provides `d3d9.lib`, `d3dx9.lib`, `dinput8.lib`, `dxguid.lib`, `dxerr.lib` and headers. |
| **Windows SDK / Platform SDK** | Matching your VS | Provides `WS2_32.lib`, `dbghelp.lib`, etc. |
| **Visual Studio** | 2005 (v8) or 2008 (v9)**Express is fine** | Project files are the legacy `.vcproj` format. Modern MSBuild **cannot** build `.vcproj` directly — it needs `VCBuild.exe`, which only ships with VS 2005/2008. A newer VS (2022) can build these but will first *upgrade* the projects to `.vcxproj`. The code uses **no MFC** and (as of the ATL-removal change) **no ATL**, so the free **Visual C++ Express** editions build it — see §6. |
| **DirectX SDK** | June 2010 (installed) — March 2009 also works | Provides `d3d9.lib`, `d3dx9.lib`, `dinput8.lib`, `dxguid.lib`, `dxerr.lib` and headers. ✅ Confirmed installed at `C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)` with `DXSDK_DIR` set machine-wide. |
| **Windows SDK / Platform SDK** | Matching your VS (e.g. Windows SDK 7.1) | Provides `WS2_32.lib`, `dbghelp.lib`, etc. With an Express edition, install the standalone Windows SDK 7.1 to guarantee these. Note: `dbghelp.lib` is listed as a link input but **no source references it** — drop it from the linker line if it isn't found. |
| **`DXSDK_DIR` environment variable** | — | The DirectX SDK installer sets this automatically (includes a trailing backslash). The projects reference the SDK **only** through this variable — see §4. |
### Bundled third-party libraries (already in the repo)
@@ -116,3 +116,28 @@ $env:DXSDK_DIR = "C:\DXSDK\" # note the trailing backslash
- Requires the OpenAL and libsndfile **runtime DLLs** at run time (see §1).
- See [docs/BUILD-NOTES.md](docs/BUILD-NOTES.md) for the repository cleanup
history, orphaned files, and the full findings behind this document.
---
## 6. Building with Visual C++ Express (2008)
The Express editions are free but ship **without MFC and without ATL**. This
codebase uses no MFC, and its only ATL dependency has been removed, so Express
now builds it:
- `MUNGA_L4/L4APP.cpp` previously included `<atlbase.h>` / `<atlconv.h>` and used
the `USES_CONVERSION` / `W2A` macros to convert wide command-line arguments to
ANSI. These were replaced with a small self-contained `L4WideToAnsi` helper
(a thin `WideCharToMultiByte` wrapper) that reproduces ATL's `W2A` behaviour.
- `UseOfATL` was set to `0` in `Munga_L4.vcproj`, `RP_L4.vcproj` and their
`VS2008` variants.
Checklist for a clean Express build:
1. Install **Visual C++ 2008 Express SP1**.
2. Install the **Windows SDK 7.1** (for `WS2_32.lib`, `dbghelp.lib`, core Win32
headers/libs that Express's bundled SDK subset may not fully cover).
3. Install the **DirectX SDK** (already done — June 2010) and confirm `DXSDK_DIR`.
4. Open `WinTesla.sln`, pick `Release|Win32`, build.
5. If the linker can't find `dbghelp.lib`, remove it from
`RP_L4` → Linker → Input → Additional Dependencies (it is unused).