#ifndef AE625BF8_B0F9_452E_8772_8819F311CB57 #define AE625BF8_B0F9_452E_8772_8819F311CB57 #include struct GHStubException : public std::exception { GHStubException(const char *msg); }; void *gh_stub_impl_ptr(void *ptr); template T gh_stub_impl_cdecl(Args... args) { #if RE_DBG_INJECTED #if MSVC static T (*__cdecl ptr)(Args...) = (T(*)(Args...))gh_stub_impl_ptr((void*)addr); #else using TFn = __cdecl T (*)(Args...); static TFn ptr = (TFn)gh_stub_impl_ptr((void*)addr); #endif return ptr(args...); #else throw GHStubException("Function not implemented"); #endif } template T gh_stub_impl_stdcall(Args... args) { #if RE_DBG_INJECTED #if MSVC static T (*__stdcall ptr)(Args...) = (T(*__stdcall)(Args...))gh_stub_impl_ptr((void*)addr); #else using TFn = __stdcall T (*)(Args...); static TFn ptr = (TFn)gh_stub_impl_ptr((void*)addr); #endif return ptr(args...); #else throw GHStubException("Function not implemented"); #endif } #endif /* AE625BF8_B0F9_452E_8772_8819F311CB57 */