void InitializeGame(void) { try { #ifndef NDEBUG #define GAMEDLL _fnmApplicationExe.FileDir()+"Game"+_strModExt+"D.dll" #else #define GAMEDLL _fnmApplicationExe.FileDir()+"Game"+_strModExt+".dll" #endif CTFileName fnmExpanded; ExpandFilePath(EFP_READ, CTString(GAMEDLL), fnmExpanded); CPrintF(TRANS("Loading game library '%s'...\n"), (const char *)fnmExpanded); HMODULE hGame = LoadLibraryA(fnmExpanded); if (hGame==NULL) { ThrowF_t("%s", GetWindowsError(GetLastError())); } CGame* (*GAME_Create)(void) = (CGame* (*)(void))GetProcAddress(hGame, "GAME_Create"); if (GAME_Create==NULL) { ThrowF_t("%s", GetWindowsError(GetLastError())); } _pGame = GAME_Create(); } catch (char *strError) { FatalError("%s", strError); } // init game - this will load persistent symbols _pGame->Initialize(CTString("Data\\DedicatedServer.gms")); }
// initialize game and load settings void Initialize(const CTFileName &fnGameSettings) { try { #ifndef NDEBUG #define GAMEDLL "Bin\\Debug\\GameMPD.dll" #else #define GAMEDLL "Bin\\GameMP.dll" #endif CTFileName fnmExpanded; ExpandFilePath(EFP_READ, CTString(GAMEDLL), fnmExpanded); HMODULE hGame = LoadLibraryA(fnmExpanded); if (hGame==NULL) { ThrowF_t("%s", GetWindowsError(GetLastError())); } CGame* (*GAME_Create)(void) = (CGame* (*)(void))GetProcAddress(hGame, "GAME_Create"); if (GAME_Create==NULL) { ThrowF_t("%s", GetWindowsError(GetLastError())); } _pGame = GAME_Create(); } catch (char *strError) { FatalError("%s", strError); } // init game - this will load persistent symbols _pGame->Initialize(fnGameSettings); }
// initialize game and load settings void Initialize(const CTFileName &fnGameSettings) { try { #ifndef NDEBUG # ifdef WORLD_EDITOR # define GAMEDLL "GameMPD.dll" # else # define GAMEDLL "Bin\\Debug\\GameMPD.dll" # endif #else # ifdef WORLD_EDITOR #define GAMEDLL "GameMP.dll" # else // WORLD_EDITOR #define GAMEDLL "Bin\\GameMP.dll" # endif // WORLD_EDITOR #endif CTFileName fnmExpanded; #ifndef WORLD_EDITOR ExpandFilePath(EFP_READ, CTString(GAMEDLL), fnmExpanded); #else fnmExpanded = _fnmApplicationPath + _fnmApplicationExe.FileDir() + GAMEDLL; #endif HMODULE hGame = LoadLibrary(fnmExpanded); if (hGame==NULL) { ThrowF_t("%s", GetWindowsError(GetLastError())); } CGame* (*GAME_Create)(void) = (CGame* (*)(void))GetProcAddress(hGame, "GAME_Create"); if (GAME_Create==NULL) { ThrowF_t("%s", GetWindowsError(GetLastError())); } _pGame = GAME_Create(); } catch (char *strError) { FatalError("%s", strError); } // init game - this will load persistent symbols // 수정된 더미. [3/2/2011 rumist] _pGame->Initialize(fnGameSettings, FALSE ); }
/** * module Call * * Call a symbol given its name and a module structure. The symbol MUST * refer to a function returning int and taking a module_t* as an argument. * \param p_module the modules * \return 0 if it pass and -1 in case of a failure */ int module_Call( vlc_object_t *obj, module_t *p_module ) { static const char psz_name[] = "vlc_entry" MODULE_SUFFIX; int (* pf_symbol) ( module_t * p_module ); /* Try to resolve the symbol */ pf_symbol = (int (*)(module_t *)) module_Lookup( p_module->handle, psz_name ); if( pf_symbol == NULL ) { #if defined(HAVE_DL_BEOS) msg_Warn( obj, "cannot find symbol \"%s\" in file `%s'", psz_name, p_module->psz_filename ); #elif defined(HAVE_DL_WINDOWS) char *psz_error = GetWindowsError(); msg_Warn( obj, "cannot find symbol \"%s\" in file `%s' (%s)", psz_name, p_module->psz_filename, psz_error ); free( psz_error ); #elif defined(HAVE_DL_DLOPEN) msg_Warn( obj, "cannot find symbol \"%s\" in file `%s' (%s)", psz_name, p_module->psz_filename, dlerror() ); #elif defined(HAVE_DL_SHL_LOAD) msg_Warn( obj, "cannot find symbol \"%s\" in file `%s' (%m)", psz_name, p_module->psz_filename ); #else # error "Something is wrong in modules.c" #endif return -1; } /* We can now try to call the symbol */ if( pf_symbol( p_module ) != 0 ) { /* With a well-written module we shouldn't have to print an * additional error message here, but just make sure. */ msg_Err( obj, "Failed to call symbol \"%s\" in file `%s'", psz_name, p_module->psz_filename ); return -1; } /* Everything worked fine, we can return */ return 0; }
/** * Load a dynamically linked library using a system dependent method. * * \param p_this vlc object * \param psz_file library file * \param p_handle the module handle returned * \return 0 on success as well as the module handle. */ int module_Load( vlc_object_t *p_this, const char *psz_file, module_handle_t *p_handle ) { module_handle_t handle; #if defined(HAVE_DL_BEOS) handle = load_add_on( psz_file ); if( handle < 0 ) { msg_Warn( p_this, "cannot load module `%s'", psz_file ); return -1; } #elif defined(HAVE_DL_WINDOWS) wchar_t psz_wfile[MAX_PATH]; MultiByteToWideChar( CP_UTF8, 0, psz_file, -1, psz_wfile, MAX_PATH ); #ifndef UNDER_CE /* FIXME: this is not thread-safe -- Courmisch */ UINT mode = SetErrorMode (SEM_FAILCRITICALERRORS); SetErrorMode (mode|SEM_FAILCRITICALERRORS); #endif handle = LoadLibraryW( psz_wfile ); #ifndef UNDER_CE SetErrorMode (mode); #endif if( handle == NULL ) { char *psz_err = GetWindowsError(); msg_Warn( p_this, "cannot load module `%s' (%s)", psz_file, psz_err ); free( psz_err ); return -1; } #elif defined(HAVE_DL_DLOPEN) # if defined (RTLD_NOW) const int flags = RTLD_NOW; # elif defined (DL_LAZY) const int flags = DL_LAZY; # else const int flags = 0; # endif char *path = ToLocale( psz_file ); handle = dlopen( path, flags ); if( handle == NULL ) { msg_Warn( p_this, "cannot load module `%s' (%s)", path, dlerror() ); LocaleFree( path ); return -1; } LocaleFree( path ); #elif defined(HAVE_DL_SHL_LOAD) handle = shl_load( psz_file, BIND_IMMEDIATE | BIND_NONFATAL, NULL ); if( handle == NULL ) { msg_Warn( p_this, "cannot load module `%s' (%m)", psz_file ); return -1; } #else # error "Something is wrong in modules.c" #endif *p_handle = handle; return 0; }
/** * Load a dynamically linked library using a system dependent method. * * \param p_this vlc object * \param psz_file library file * \param p_handle the module handle returned * \return 0 on success as well as the module handle. */ int module_Load( vlc_object_t *p_this, const char *psz_file, module_handle_t *p_handle ) { module_handle_t handle; #if defined(HAVE_DL_DYLD) NSObjectFileImage image; NSObjectFileImageReturnCode ret; ret = NSCreateObjectFileImageFromFile( psz_file, &image ); if( ret != NSObjectFileImageSuccess ) { msg_Warn( p_this, "cannot create image from `%s'", psz_file ); return -1; } /* Open the dynamic module */ handle = NSLinkModule( image, psz_file, NSLINKMODULE_OPTION_RETURN_ON_ERROR ); if( !handle ) { NSLinkEditErrors errors; const char *psz_file, *psz_err; int i_errnum; NSLinkEditError( &errors, &i_errnum, &psz_file, &psz_err ); msg_Warn( p_this, "cannot link module `%s' (%s)", psz_file, psz_err ); NSDestroyObjectFileImage( image ); return -1; } /* Destroy our image, we won't need it */ NSDestroyObjectFileImage( image ); #elif defined(HAVE_DL_BEOS) handle = load_add_on( psz_file ); if( handle < 0 ) { msg_Warn( p_this, "cannot load module `%s'", psz_file ); return -1; } #elif defined(HAVE_DL_WINDOWS) wchar_t psz_wfile[MAX_PATH]; MultiByteToWideChar( CP_ACP, 0, psz_file, -1, psz_wfile, MAX_PATH ); #ifndef UNDER_CE /* FIXME: this is not thread-safe -- Courmisch */ UINT mode = SetErrorMode (SEM_FAILCRITICALERRORS); SetErrorMode (mode|SEM_FAILCRITICALERRORS); #endif handle = LoadLibraryW( psz_wfile ); #ifndef UNDER_CE SetErrorMode (mode); #endif if( handle == NULL ) { char *psz_err = GetWindowsError(); msg_Warn( p_this, "cannot load module `%s' (%s)", psz_file, psz_err ); free( psz_err ); return -1; } #elif defined(HAVE_DL_DLOPEN) # if defined (RTLD_NOW) const int flags = RTLD_NOW; # elif defined (DL_LAZY) const int flags = DL_LAZY; # else const int flags = 0; # endif handle = dlopen( psz_file, flags ); if( handle == NULL ) { msg_Warn( p_this, "cannot load module `%s' (%s)", psz_file, dlerror() ); return -1; } #elif defined(HAVE_DL_SHL_LOAD) handle = shl_load( psz_file, BIND_IMMEDIATE | BIND_NONFATAL, NULL ); if( handle == NULL ) { msg_Warn( p_this, "cannot load module `%s' (%m)", psz_file ); return -1; } #else # error "Something is wrong in modules.c" #endif *p_handle = handle; return 0; }