CompatLib/README.md

43 lines
2.4 KiB
Markdown
Raw 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-01-03 20:03:19 +01: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. Also, the "shim" function tries to emulate the call, by forwarding the call to an adequate function in `KERNEL32.DLL` that *does* exist on Windows XP. There currently are *two* such function dependencies that must be substituted by CompatLib – `InitializeCriticalSectionEx()` and `LCMapStringEx()`.
### 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*
* If your *application code* uses Win32 API functions unavailable in Windows XP, then CompatLib will **not** help!
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;