|  | #ifndef WIN32_LEAN_AND_MEAN | 
|  | #define WIN32_LEAN_AND_MEAN | 
|  | #endif | 
|  | #undef  __CRT__NO_INLINE | 
|  | #define __CRT__NO_INLINE | 
|  | #include <winsock2.h> | 
|  | #include <wspiapi.h> | 
|  |  | 
|  | 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; | 
|  | } |