6 template<
typename R,
typename... Args,
class C>
9 typedef typename std::conditional<std::is_same<R, void>::value, int, R>::type ReturnType;
11 typedef R( __stdcall *type )(Args...);
12 typedef R( __stdcall *hktype )(Args&...);
13 typedef R( C::*hktypeC )(Args&...);
18 typedef ReturnType( __stdcall *typeR )(Args...);
19 typedef ReturnType( __stdcall *hktypeR )(Args&...);
20 typedef ReturnType( C::*hktypeCR )(Args&...);
22 static __declspec(noinline) ReturnType __stdcall Handler( Args... args )
25 return pInst->HandlerP( std::forward<Args>( args )... );
28 ReturnType HandlerP( Args&&... args )
30 ReturnType val_new, val_original;
34 if (_order == CallOrder::HookFirst)
36 val_new = CallCallback( std::forward<Args>( args )... );
37 val_original = CallOriginal( std::forward<Args>( args )... );
39 else if (_order == CallOrder::HookLast)
41 val_original = CallOriginal( std::forward<Args>( args )... );
42 val_new = CallCallback( std::forward<Args>( args )... );
46 val_original = val_new = CallCallback( std::forward<Args>( args )... );
51 return (_retType == ReturnMethod::UseOriginal ? val_original : val_new);
54 inline ReturnType CallOriginal( Args&&... args )
56 return (reinterpret_cast<typeR>(_callOriginal))(args...);
59 inline ReturnType CallCallback( Args&&... args )
61 if (_callbackClass !=
nullptr)
62 return ((C*)_callbackClass->*brutal_cast<hktypeCR>(_callback))(args...);
64 return (reinterpret_cast<hktypeR>(_callback))(args...);
Definition: LocalHookBase.h:48
Definition: HookHandlers.h:10
Definition: AsmHelper32.cpp:6