Compare commits
No commits in common. "master" and "1.0.1" have entirely different histories.
@ -20,6 +20,9 @@
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
|
||||
</MASM>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\compat.c" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
|
@ -22,4 +22,9 @@
|
||||
<Filter>Source Files</Filter>
|
||||
</MASM>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\compat.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
17
CompatLib/src/compat.c
Normal file
17
CompatLib/src/compat.c
Normal file
@ -0,0 +1,17 @@
|
||||
/******************************************************************************/
|
||||
/* CompatLib for Windows XP, by LoRd_MuldeR <MuldeR2@GMX.de> */
|
||||
/* This work has been released under the CC0 1.0 Universal license! */
|
||||
/******************************************************************************/
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN 1
|
||||
#include <Windows.h>
|
||||
|
||||
BOOL WINAPI XPCompatLib_InitializeCriticalSectionEx(LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount, DWORD Flags)
|
||||
{
|
||||
return InitializeCriticalSectionAndSpinCount(lpCriticalSection, dwSpinCount);
|
||||
}
|
||||
|
||||
int WINAPI XPCompatLib_LCMapStringEx(LPCWSTR lpLocaleName, DWORD dwMapFlags, LPCWSTR lpSrcStr, int cchSrc, LPWSTR lpDestStr, int cchDest, LPNLSVERSIONINFO lpVersionInformation, LPVOID lpReserved, LPARAM sortHandle)
|
||||
{
|
||||
return LCMapStringW(LOCALE_SYSTEM_DEFAULT, dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest);
|
||||
}
|
@ -5,19 +5,13 @@
|
||||
|
||||
.data
|
||||
|
||||
__imp_CompareStringEx dq __acrt_CompareStringEx
|
||||
__imp_GetLocaleInfoEx dq __acrt_GetLocaleInfoEx
|
||||
__imp_InitializeCriticalSectionEx dq __acrt_InitializeCriticalSectionEx
|
||||
__imp_LCMapStringEx dq __acrt_LCMapStringEx
|
||||
__imp_InitializeCriticalSectionEx dq XPCompatLib_InitializeCriticalSectionEx
|
||||
__imp_LCMapStringEx dq XPCompatLib_LCMapStringEx
|
||||
|
||||
externdef __imp_CompareStringEx : QWORD
|
||||
externdef __imp_GetLocaleInfoEx : QWORD
|
||||
externdef __imp_InitializeCriticalSectionEx : QWORD
|
||||
externdef __imp_LCMapStringEx : QWORD
|
||||
|
||||
extern __acrt_CompareStringEx : proc
|
||||
extern __acrt_GetLocaleInfoEx : proc
|
||||
extern __acrt_InitializeCriticalSectionEx : proc
|
||||
extern __acrt_LCMapStringEx : proc
|
||||
extern XPCompatLib_InitializeCriticalSectionEx : proc
|
||||
extern XPCompatLib_LCMapStringEx : proc
|
||||
|
||||
end
|
||||
|
@ -7,19 +7,13 @@
|
||||
|
||||
.data
|
||||
|
||||
__imp__CompareStringEx@36 dd ___acrt_CompareStringEx@36
|
||||
__imp__GetLocaleInfoEx@16 dd ___acrt_GetLocaleInfoEx@16
|
||||
__imp__InitializeCriticalSectionEx@12 dd ___acrt_InitializeCriticalSectionEx@12
|
||||
__imp__LCMapStringEx@36 dd ___acrt_LCMapStringEx@36
|
||||
__imp__InitializeCriticalSectionEx@12 dd _XPCompatLib_InitializeCriticalSectionEx@12
|
||||
__imp__LCMapStringEx@36 dd _XPCompatLib_LCMapStringEx@36
|
||||
|
||||
externdef __imp__CompareStringEx@36 : DWORD
|
||||
externdef __imp__GetLocaleInfoEx@16 : DWORD
|
||||
externdef __imp__InitializeCriticalSectionEx@12 : DWORD
|
||||
externdef __imp__LCMapStringEx@36 : DWORD
|
||||
|
||||
extern ___acrt_CompareStringEx@36 : proc
|
||||
extern ___acrt_GetLocaleInfoEx@16 : proc
|
||||
extern ___acrt_InitializeCriticalSectionEx@12 : proc
|
||||
extern ___acrt_LCMapStringEx@36 : proc
|
||||
extern _XPCompatLib_InitializeCriticalSectionEx@12 : proc
|
||||
extern _XPCompatLib_LCMapStringEx@36 : proc
|
||||
|
||||
end
|
||||
|
@ -5,7 +5,7 @@ CompatLib – compatibility library for re-establishing Windows XP (SP-3) su
|
||||
|
||||
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!
|
||||
|
||||
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()`.
|
||||
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
|
||||
@ -14,7 +14,7 @@ CompatLib provides a workaround for the problem, by eliminating the "problematic
|
||||
|
||||
* Running x64 (64-Bit) executables is possible, but requires the *Windows XP Professional x64 Edition*
|
||||
|
||||
* If your *application code* uses other Win32 API functions unavailable in Windows XP, then CompatLib will **not** help!
|
||||
* 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.
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user