Updated README file.
This commit is contained in:
parent
d942b6cdfc
commit
b8225eeb99
24
README.md
24
README.md
@ -1,23 +1,33 @@
|
|||||||
Introduction
|
Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
CompatLib – compatibility library for re-establishing Windows XP SP-3 support in VS2019 (and later).
|
CompatLib – compatibility library for re-establishing Windows XP (SP-3) support in VS2019 and VS2022.
|
||||||
|
|
||||||
Executables built with VS2019 (Toolset v142) do **not** normally run on Windows XP SP-3. That is because the executables created by VS2019 (Toolset v142) depend on certain functions in `KERNEL32.DLL` that simply did **not** exist in Windows XP SP-3 yet. Consequently, the executable will fail to start with an error message about the missing entry point! 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 SP-3. This is achieved by substituting the call to the original (missing) function in `KERNEL32.DLL` with a small "shim" function that is linked directly into the executable. The "shim" function will forward the call to an adequate function in `KERNEL32.DLL` that *does* exist on Windows XP SP-3. In fact, there currently are *two* such function dependencies that must be substituted by CompatLib, i.e. `InitializeCriticalSectionEx()` and `LCMapStringEx()`.
|
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!
|
||||||
|
|
||||||
**Note:** It still is necessary to install "Service Pack 3" for Windows XP 😏
|
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.
|
||||||
|
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
=====
|
=====
|
||||||
|
|
||||||
In order to build an executable that will run on Windows XP SP-3, the following project settings are required:
|
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:
|
||||||
|
|
||||||
1. The ***runtime library*** must be set to `Multi-threaded (/MT)` – *static* linking is necessary
|
1. ***Code Generation / Runtime Library*** must be set to `Multi-threaded (/MT)` ➟ *static* linking is necessary!
|
||||||
|
|
||||||
2. The ***minimum required version*** must be set to `5.1` (32-Bit) or `5.2` (64-Bit)
|
2. ***System / Minimum Required Version*** must be forced to `5.1` (x86) or `5.2` (x64)
|
||||||
|
|
||||||
3. The matching variant of `libcompat.lib` must be added to the ***additional dependencies***
|
3. Finally, the matching variant of `libcompat.lib` must be added to ***Input / Additional Dependencies***
|
||||||
|
|
||||||
|
|
||||||
License
|
License
|
||||||
|
Loading…
Reference in New Issue
Block a user