/* ================= Sys_GetGameAPI Loads the game dll ================= */ void *Sys_GetGameAPI (void *parms) { void *(*GetGameAPI) (void *); const char *gamename; #ifdef JK2_MODE gamename = "jospgame" ARCH_STRING DLL_EXT; #else gamename = "jagame" ARCH_STRING DLL_EXT; #endif if (game_library) Com_Error (ERR_FATAL, "Sys_GetGameAPI without Sys_UnloadingGame"); game_library = Sys_RetrieveDLL(gamename); if(!game_library) { char *buf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL ); Com_Printf( "LoadLibrary(\"%s\") failed\n", gamename); Com_Printf( "...reason: '%s'\n", buf ); Com_Error( ERR_FATAL, "Couldn't load game" ); } GetGameAPI = (void *(*)(void *))GetProcAddress (game_library, "GetGameAPI"); if (!GetGameAPI) { Sys_UnloadGame (); return NULL; } return GetGameAPI (parms); }
/* ================= Sys_GetGameAPI Loads the game dll ================= */ void *Sys_GetGameAPI (void *parms) { void *(*GetGameAPI) (void *); const char *gamename; #ifdef JK2_MODE gamename = "jospgame" ARCH_STRING DLL_EXT; #else gamename = "jagame" ARCH_STRING DLL_EXT; #endif if (game_library) Com_Error (ERR_FATAL, "Sys_GetGameAPI without Sys_UnloadingGame"); game_library = Sys_RetrieveDLL(gamename); if(!game_library) { Com_Printf( "LoadLibrary(\"%s\") failed\n", gamename); Com_Printf( "...reason: '%s'\n", GetErrorString( GetLastError() ) ); Com_Error( ERR_FATAL, "Couldn't load game" ); } GetGameAPI = (void *(*)(void *))GetProcAddress (game_library, "GetGameAPI"); if (!GetGameAPI) { Com_Printf( "Sys_GetGameAPI: Entry point not found in %s. Failed with system error code 0x%X.\n", gamename, GetLastError() ); Sys_UnloadGame (); return NULL; } return GetGameAPI (parms); }
/* ================= Sys_GetGameAPI Loads the game dll ================= */ void *Sys_GetGameAPI (void *parms) { void *(*GetGameAPI) (void *); #if defined _M_IX86 const char *gamename; if(com_jk2 && com_jk2->integer) { gamename = "jk2gamex86.dll"; } else { gamename = "jagamex86.dll"; } #ifdef NDEBUG const char *debugdir = "release"; #elif MEM_DEBUG const char *debugdir = "shdebug"; #else const char *debugdir = "debug"; #endif //NDEBUG #elif defined _M_ALPHA const char *gamename = "jagameaxp.dll"; #ifdef NDEBUG const char *debugdir = "releaseaxp"; #else const char *debugdir = "debugaxp"; #endif //NDEBUG #endif //_M__IX86 if (game_library) Com_Error (ERR_FATAL, "Sys_GetGameAPI without Sys_UnloadingGame"); game_library = Sys_RetrieveDLL(gamename, debugdir); if(!game_library) { char *buf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL ); Com_Printf( "LoadLibrary(\"%s\") failed\n", gamename); Com_Printf( "...reason: '%s'\n", buf ); Com_Error( ERR_FATAL, "Couldn't load game" ); } GetGameAPI = (void *(*)(void *))GetProcAddress (game_library, "GetGameAPI"); if (!GetGameAPI) { Sys_UnloadGame (); return NULL; } return GetGameAPI (parms); }