The first problem is OpenSSL (notably, libcrypto-3.dll) calls for "api-ms-win-crt-stdio-l1-1-0.dll", which is a problem. This is provided by the VC 2017 runtime installer, which did not fix it. The APIs are not present to locate the entry point in this runtime file provided by Microsoft on Windows XP.
Reviewing my libraries authors webpage under "Compatibility and Support Matrix" I see XP is red (Incompatible / Unsupported).
So we can shoot that out of the park.
I am still testing libcurl, and so far it I am having no luck.
It would be nice to support XP+ as my GUI and API calls are all purposely compatible by best efforts from Windows 2000 and onward. Very strange.
Would someone recommend a old version of OpenSSL lib? This sounds like a terrible idea, but for the sake of legacy support on this platform.
EDIT: Solved.https://msfn.org/board/topic/176299-latest-version-of-software-running-on-xp/page/36/https://slproweb.com/products/Win32OpenSSL.html (Install 32bit, extract libcrypt-3.dll)
Required on a fresh XP install:
- VC_redist.x86.exe (14.28.29213.0)
- Win32OpenSSL-3_3_1.exe -> libcrypto-3.dll (Program Files\OpenSSL-Win32\libcrypto-3.dll)
---
Full blown app is running on Windows XP! Winsock, OpenSSL, cURL, everything. Very nice. Also the exact same copy from XP is running in Windows 10 just fine. So, this will be my 32bit project settings going forward and will make no assumption it is XP, but all 32bit versions of Windows. The compatibility I was looking for.
The DLLs will do the talking, I can test anything on VirtualBox.
Winsock CompatibilityFor Winsock on XP for compatibility you must consider too
Windows Vista+
inet_ntop(AF_INET, &(clientAddr.sin_addr), ip, INET_ADDRSTRLEN);
port = ntohs(clientAddr.sin_port);
Windows XP+
char *ip = inet_ntoa(clientAddr.sin_addr);
port = ntohs(clientAddr.sin_port);
if (ip != NULL) {
// use ip, port
}
https://learn.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-inet_ntophttps://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-inet_ntoaOtherwise this will break the compatibility and throw a Winsock API error dialog.