bool gkGameFramework::InitGame(const TCHAR* dllname) { gkLogMessage(_T("load Game...")); // ensure destroyed DestroyGameImmediate(); #ifndef _STATIC_LIB // check the dll name TCHAR name[MAX_PATH]; gkIniParser startupFile( _T("config/startup.cfg") ); startupFile.Parse(); gkStdString ret = startupFile.FetchValue( _T("launcher"), _T("gamedll") ); if(ret != _T("")) { _tcscpy(name, ret.c_str()); } else { _tcscpy(name, _T("TestCases")); } gkLogMessage(_T("load Game: %s"), name); gkStdString dllPath = gEnv->rootPath; dllPath += "\\bin64\\"; // create system.dll first gkOpenModule( m_hHandleGame, name, dllPath.c_str()); if (m_hHandleGame) { m_pFuncGameStart = (GET_GAMEDLL)DLL_GETSYM(m_hHandleGame, "gkModuleInitialize"); m_pFuncGameEnd = (DESTROY_GAMEDLL)DLL_GETSYM(m_hHandleGame, "gkModuleUnload"); m_pGame = m_pFuncGameStart(gEnv); m_pGame->OnInit(); } else { gkLogWarning(_T("gkFramework::Load GameDll %s failed."), name ); } #else m_pGame = gkLoadStaticModule_gkGame(gEnv); m_pGame->OnInit(); #endif return true; }
//-------------------------------------------------------------------------------------- // Initialize everything and go into a render loop //-------------------------------------------------------------------------------------- INT WINAPI wWinMain( HINSTANCE, HINSTANCE, LPWSTR, int ) { // Enable run-time memory check for debug builds. #if (defined(DEBUG) || defined(_DEBUG)) && defined( OS_WIN32 ) _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); #endif #ifdef _STATIC_LIB IGameFramework* game = gkLoadStaticModule_gkGameFramework(); #else // load gkSystem dll HINSTANCE hHandle = 0; gkOpenModule(hHandle, _T("gkGameFramework"));//, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); GET_SYSTEM pFuncStart = (GET_SYSTEM)DLL_GETSYM(hHandle, "gkModuleInitialize"); IGameFramework* game = pFuncStart(); #endif int width = 1280; int height = 720; // init ISystemInitInfo sii; sii.fWidth = width; sii.fHeight = height; if (!(game->Init(sii))) { return 0; } game->PostInit( NULL, sii ); game->InitGame( NULL ); // run game->Run(); // destroy game->DestroyGame(false); game->Destroy(); // free #ifdef _STATIC_LIB gkFreeStaticModule_gkGameFramework(); #else gkFreeModule( hHandle ); #endif return 0; }