mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Fixed crash on startup on WinXP/2003
Moved the LoadLibrary call out of DllMain entry point. Updated version number and changelog.
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
# Changelog
|
||||
|
||||
## 4.4.0.1
|
||||
* Fixed a crash on startup on Windows XP/2003
|
||||
|
||||
## 4.4
|
||||
* Implemented a `mods_order.txt` to improve and simplify mod ordering and add support for mod managers. This replaces previous **.dat** file autoloading. Please refer to `ddraw.ini` for details
|
||||
* Implemented a **custom config file parser**, which greatly improves the performance of sfall initialization and reading files from scripts
|
||||
|
||||
@@ -111,6 +111,7 @@
|
||||
<ObjectFileName>$(IntDir)/%(RelativeDir)/</ObjectFileName>
|
||||
<ForcedIncludeFiles>stdafx.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
|
||||
<AdditionalIncludeDirectories>$(DXSDK_DIR)Include\</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>d3d9.lib;d3dx9.lib;dinput.lib;Strmiids.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
@@ -174,6 +175,7 @@
|
||||
<ForcedIncludeFiles>stdafx.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<AdditionalIncludeDirectories>$(DXSDK_DIR)Include\</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>d3d9.lib;d3dx9.lib;dinput.lib;Strmiids.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
@@ -239,6 +241,7 @@
|
||||
<ForcedIncludeFiles>stdafx.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<AdditionalIncludeDirectories>$(DXSDK_DIR)Include\</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>d3d9.lib;d3dx9.lib;dinput.lib;Strmiids.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
@@ -305,6 +308,7 @@
|
||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<AdditionalIncludeDirectories>$(DXSDK_DIR)Include\</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>d3d9.lib;d3dx9.lib;dinput.lib;Strmiids.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
|
||||
+9
-4
@@ -90,6 +90,7 @@
|
||||
#include <chrono>
|
||||
|
||||
ddrawDll ddraw;
|
||||
static void LoadOriginalDll(DWORD fdwReason);
|
||||
|
||||
namespace sfall
|
||||
{
|
||||
@@ -205,6 +206,9 @@ static int CheckEXE() {
|
||||
|
||||
static HMODULE SfallInit() {
|
||||
char filepath[MAX_PATH];
|
||||
|
||||
LoadOriginalDll(DLL_PROCESS_ATTACH);
|
||||
|
||||
GetModuleFileName(0, filepath, MAX_PATH);
|
||||
|
||||
auto initStart = std::chrono::high_resolution_clock::now();
|
||||
@@ -304,7 +308,7 @@ defaultIni:
|
||||
|
||||
}
|
||||
|
||||
static bool LoadOriginalDll(DWORD fdwReason) {
|
||||
static void LoadOriginalDll(DWORD fdwReason) {
|
||||
switch (fdwReason) {
|
||||
case DLL_PROCESS_ATTACH:
|
||||
char path[MAX_PATH];
|
||||
@@ -335,20 +339,21 @@ static bool LoadOriginalDll(DWORD fdwReason) {
|
||||
ddraw.ReleaseDDThreadLock = GetProcAddress(ddraw.dll, "ReleaseDDThreadLock");
|
||||
ddraw.SetAppCompatData = GetProcAddress(ddraw.dll, "SetAppCompatData");
|
||||
}
|
||||
return true;
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
if (ddraw.dll) FreeLibrary(ddraw.dll);
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
|
||||
if (LoadOriginalDll(fdwReason)) {
|
||||
if (fdwReason == DLL_PROCESS_ATTACH) {
|
||||
if (sfall::CheckEXE()) {
|
||||
ddraw.sfall = hinstDLL;
|
||||
sfall::MakeCall(0x4DE8DE, sfall::SfallInit); // LoadDirectX_
|
||||
}
|
||||
} else {
|
||||
LoadOriginalDll(fdwReason);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
+2
-2
@@ -25,6 +25,6 @@
|
||||
#define VERSION_MAJOR 4
|
||||
#define VERSION_MINOR 4
|
||||
#define VERSION_BUILD 0
|
||||
#define VERSION_REV 0
|
||||
#define VERSION_REV 1
|
||||
|
||||
#define VERSION_STRING "4.4"
|
||||
#define VERSION_STRING "4.4.0.1"
|
||||
|
||||
Reference in New Issue
Block a user