#ifdef _MSC_VER
#define FORCEDINLINE __forceinline
#else
#define FORCEDINLINE __attribute__((always_inline))
#endif
FORCEDINLINE void * __stdcall asdf(int addr)
{
__asm
{
push addr
call core_call
}
}
template <class A>
FORCEDINLINE void * __stdcall asdf(int addr, A a)
{
__asm
{
push a
push addr
call core_call
}
}
template <class A, class B>
FORCEDINLINE void * __stdcall asdf(int addr, A a, B b)
{
__asm
{
push b
push a
push addr
call core_call
}
}
template <class A, class B, class C>
FORCEDINLINE void * __stdcall asdf(int addr, A a, B b, C c)
{
__asm
{
push c
push b
push a
push addr
call core_call
}
}
template <class A, class B, class C, class D>
FORCEDINLINE void * __stdcall asdf(int addr, A a, B b, C c, D d)
{
__asm
{
push d
push c
push b
push a
push addr
call core_call
}
}
// ... and so on
#define function(...) (HANDLE WINAPI) asdf(123456, __VA_ARGS__);