#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); typedef uintptr_t stub_t; template struct TStubFunctionImpl { typedef T (*TFn)(Args...); static inline TFn ptr = (TFn)gh_stub_impl_ptr((void *)addr); }; template struct TStubFunctionImplStdCall { typedef T (*__stdcall TFn)(Args...); static inline TFn ptr = (TFn)gh_stub_impl_ptr((void *)addr); }; template T gh_stub_impl_cdecl(Args... args) { #if RE_DBG_INJECTED auto ptr = TStubFunctionImpl::ptr; return ptr(args...); #else throw GHStubException("Function not implemented"); #endif } template T gh_stub_impl_stdcall(Args... args) { #if RE_DBG_INJECTED auto ptr = TStubFunctionImplStdCall::ptr; return ptr(args...); #else throw GHStubException("Function not implemented"); #endif } #endif /* AE625BF8_B0F9_452E_8772_8819F311CB57 */