1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Fixed crash at startup in Anno 1503 AD

This commit is contained in:
narzoul 2021-04-06 13:34:06 +02:00
parent 34c5c28cec
commit cb35ee4beb
3 changed files with 4 additions and 14 deletions

View File

@ -215,8 +215,6 @@ namespace
}
g_isDbgEngInitialized = true;
CoInitialize(nullptr);
HRESULT result = S_OK;
if (FAILED(result = DebugCreate(IID_IDebugClient, reinterpret_cast<void**>(&g_debugClient))) ||
FAILED(result = g_debugClient->QueryInterface(IID_IDebugControl, reinterpret_cast<void**>(&g_debugControl))) ||

View File

@ -38,20 +38,13 @@ namespace
void installHooks();
template <FARPROC(Dll::Procs::* origFunc), typename Result, typename FirstParam, typename... Params>
Result WINAPI directDrawFunc(FirstParam firstParam, Params... params)
template <FARPROC(Dll::Procs::* origFunc), typename OrigFuncPtrType, typename FirstParam, typename... Params>
HRESULT WINAPI directDrawFunc(FirstParam firstParam, Params... params)
{
LOG_FUNC(getFuncName<origFunc>(), firstParam, params...);
installHooks();
suppressEmulatedDirectDraw(firstParam);
return LOG_RESULT(reinterpret_cast<FuncPtr<Result, FirstParam, Params...>>(Dll::g_origProcs.*origFunc)(
firstParam, params...));
}
template <FARPROC(Dll::Procs::* origFunc), typename Result, typename... Params>
FuncPtr<Result, Params...> getDirectDrawFuncPtr(FuncPtr<Result, Params...>)
{
return &directDrawFunc<origFunc, Result, Params...>;
return LOG_RESULT(reinterpret_cast<OrigFuncPtrType>(Dll::g_origProcs.*origFunc)(firstParam, params...));
}
std::string getDirName(const std::string& path)
@ -190,7 +183,7 @@ namespace
#define HOOK_DDRAW_PROC(proc) \
Compat::hookFunction( \
reinterpret_cast<void*&>(Dll::g_origProcs.proc), \
getDirectDrawFuncPtr<&Dll::Procs::proc>(static_cast<decltype(&proc)>(nullptr)), \
static_cast<decltype(&proc)>(&directDrawFunc<&Dll::Procs::proc, decltype(&proc)>), \
#proc);
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)

View File

@ -459,7 +459,6 @@ namespace Gdi
HOOK_FUNCTION(user32, UpdateLayeredWindow, updateLayeredWindow);
HOOK_FUNCTION(user32, UpdateLayeredWindowIndirect, updateLayeredWindowIndirect);
CoInitialize(nullptr);
SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_CREATE,
Dll::g_currentModule, &objectCreateEvent, GetCurrentProcessId(), 0, WINEVENT_INCONTEXT);
SetWinEventHook(EVENT_OBJECT_STATECHANGE, EVENT_OBJECT_STATECHANGE,