CompatLib/README.md

43 lines
2.4 KiB
Markdown
Raw Permalink Normal View History

2022-12-31 16:23:31 +01:00
Introduction
============
2023-01-03 20:03:19 +01:00
CompatLib – compatibility library for re-establishing Windows XP (SP-3) support in VS2019 and VS2022.
2022-12-31 16:23:31 +01:00
2023-01-03 20:03:19 +01:00
C/C++ executables built with VS2019 (Toolset v142) or VS2022 (Toolset v143) do **not** normally run on Windows XP. That is because the executables created by VS2019 (Toolset v142) or VS2022 (Toolset v143) depend on certain functions in the `KERNEL32.DLL` system library that simply did **not** exist in Windows XP yet. Consequently, on the Windows XP system, those executable fail to start with an error message about the missing entry point!
2022-12-31 16:23:31 +01:00
2023-04-08 11:33:32 +02:00
CompatLib provides a workaround for the problem, by eliminating the "problematic" `KERNEL32.DLL` dependencies from the executable, so that the executable will again be able to run on Windows XP. This is achieved by substituting the call to the original (missing) function in `KERNEL32.DLL` with a small "shim" function. The "shim" function is linked directly into the executable file; it tries to emulate the call, by forwarding the call to an adequate function in `KERNEL32.DLL` that *does* exist on Windows XP. Dependencies that must be substituted by CompatLib include `InitializeCriticalSectionEx()`, `LCMapStringEx()`, `CompareStringEx()` and `GetLocaleInfoEx()`.
2023-01-03 20:03:19 +01:00
### Remarks
* Even with CompatLib, it still *is* necessary to install "Service Pack 3" for Windows XP on the target system
* Running x64 (64-Bit) executables is possible, but requires the *Windows XP Professional x64 Edition*
2023-04-08 11:33:32 +02:00
* If your *application code* uses other Win32 API functions unavailable in Windows XP, then CompatLib will **not** help!
2023-01-03 20:03:19 +01:00
CompatLib **only** removes the "problematic" dependencies induced by Microsoft's C/C++ Runtime.
2022-12-31 16:23:31 +01:00
Usage
=====
2023-01-03 20:03:19 +01:00
In order to build an executable that will run on Windows XP with VS2019 (Toolset v142) or VS2022 (Toolset v143), the following settings are required in your Visual Studio C/C++ project:
2022-12-31 16:23:31 +01:00
2023-01-03 20:03:19 +01:00
1. ***Code Generation / Runtime Library*** must be set to `Multi-threaded (/MT)` ➟ *static* linking is necessary!
2022-12-31 16:23:31 +01:00
2023-01-03 20:03:19 +01:00
2. ***System / Minimum Required Version*** must be forced to `5.1` (x86) or `5.2` (x64)
2022-12-31 16:23:31 +01:00
2023-01-03 20:03:19 +01:00
3. Finally, the matching variant of `libcompat.lib` must be added to ***Input / Additional Dependencies***
2022-12-31 16:23:31 +01:00
License
=======
This work has been released under the **CC0 1.0 Universal** license.
For details, please refer to:
<https://creativecommons.org/publicdomain/zero/1.0/legalcode>
&marker;