diff --git a/docs/rh-log.txt b/docs/rh-log.txt index f46b28d88..551109f7f 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,6 @@ March 25, 2009 +- Made fmodex.dll delay-loaded so the game should no be runnable on Windows + 95 again, though without sound. - Changed gameinfo_t and gameborder_t to be named structs instead of typedef'ed anonymous structs. - Fixed: P_AutoUseHealth() used autousemodes 0 and 1 instead of 1 and 2. diff --git a/src/sound/fmodsound.cpp b/src/sound/fmodsound.cpp index c03bfe0aa..6fa967582 100644 --- a/src/sound/fmodsound.cpp +++ b/src/sound/fmodsound.cpp @@ -1,9 +1,9 @@ /* -** i_sound.cpp +** fmodsound.cpp ** System interface for sound; uses FMOD Ex. ** **--------------------------------------------------------------------------- -** Copyright 1998-2008 Randy Heit +** Copyright 1998-2009 Randy Heit ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without @@ -582,6 +582,28 @@ bool FMODSoundRenderer::IsValid() return InitSuccess; } +#ifdef _MSC_VER +//========================================================================== +// +// CheckException +// +//========================================================================== + +#define FACILITY_VISUALCPP ((LONG)0x6d) +#define VcppException(sev,err) ((sev) | (FACILITY_VISUALCPP<<16) | err) + +static int CheckException(DWORD code) +{ + if (code == VcppException(ERROR_SEVERITY_ERROR,ERROR_MOD_NOT_FOUND) || + code == VcppException(ERROR_SEVERITY_ERROR,ERROR_PROC_NOT_FOUND)) + { + return EXCEPTION_EXECUTE_HANDLER; + } + return EXCEPTION_CONTINUE_SEARCH; +} + +#endif + //========================================================================== // // FMODSoundRenderer :: Init @@ -619,7 +641,23 @@ bool FMODSoundRenderer::Init() Printf("I_InitSound: Initializing FMOD\n"); // Create a System object and initialize. +#ifdef _MSC_VER + __try { +#endif result = FMOD::System_Create(&Sys); +#ifdef _MSC_VER + } + __except(CheckException(GetExceptionCode())) + { + Sys = NULL; + Printf(TEXTCOLOR_ORANGE"Failed to load fmodex" +#ifdef _WIN64 + "64" +#endif + ".dll\n"); + return false; + } +#endif if (result != FMOD_OK) { Sys = NULL; diff --git a/zdoom.vcproj b/zdoom.vcproj index 9cd643f17..e298ccd3b 100644 --- a/zdoom.vcproj +++ b/zdoom.vcproj @@ -1,7 +1,7 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - @@ -1860,6 +1856,14 @@ Outputs="$(IntDir)/$(InputName).obj" /> + + + @@ -2025,6 +2029,14 @@ Outputs="$(IntDir)\$(InputName).obj" /> + + + @@ -2035,14 +2047,6 @@ Outputs="$(IntDir)\$(InputName).obj" /> - - - + + + - - - + + + @@ -5343,14 +5355,6 @@ AdditionalIncludeDirectories="src\win32;$(NoInherit)" /> - - - @@ -5629,7 +5633,7 @@ />