#ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #undef __CRT__NO_INLINE #define __CRT__NO_INLINE #include #include FARPROC WINAPI WspiapiLoad (WORD wFunction) { static WINBOOL isinit = FALSE; static WSPIAPI_FUNCTION rgtGlobal[] = WSPIAPI_FUNCTION_ARRAY; static const int iNumGlobal = (sizeof(rgtGlobal) / sizeof(WSPIAPI_FUNCTION)); HMODULE hlib = NULL; WSPIAPI_FUNCTION rgtLocal[] = WSPIAPI_FUNCTION_ARRAY; FARPROC fScratch = NULL; int i = 0; if (isinit) return rgtGlobal[wFunction].pfAddress; for (;;) { CHAR systemdir[MAX_PATH + 1], path[MAX_PATH + 8]; if (GetSystemDirectoryA (systemdir, MAX_PATH) == 0) break; strcpy (path, systemdir); strcat (path, "\\ws2_32"); hlib = LoadLibraryA (path); if(hlib != NULL) { fScratch = GetProcAddress (hlib, "getaddrinfo"); if (!fScratch) { FreeLibrary (hlib); hlib = NULL; } } if (hlib != NULL) break; strcpy (path, systemdir); strcat (path, "\\wship6"); hlib = LoadLibraryA (path); if (hlib != NULL) { if ((fScratch = GetProcAddress (hlib, "getaddrinfo")) == NULL) { FreeLibrary (hlib); hlib = NULL; } } break; } if (hlib != NULL) { for (i = 0; i < iNumGlobal; i++) { if ((rgtLocal[i].pfAddress = GetProcAddress (hlib, rgtLocal[i].pszName)) == NULL) { FreeLibrary (hlib); hlib = NULL; break; } } if (hlib != NULL) { for (i = 0; i < iNumGlobal; i++) rgtGlobal[i].pfAddress = rgtLocal[i].pfAddress; } } isinit = TRUE; return rgtGlobal[wFunction].pfAddress; }