⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xevent.h

📁 HTTP 搜索代码
💻 H
字号:
#pragma once


template < class T >
inline LPVOID ThisCall0( T func, LPVOID pThis )
{	
	__asm mov ecx, pThis
	//__asm push eax
	__asm call dword ptr[func]
}

template < class T, class Tp1 >
inline LPVOID ThisCall1( T func, LPVOID pThis, Tp1 lpParam1 )
{	
	__asm push dword ptr[lpParam1]
	__asm mov ecx, pThis
	//__asm push eax
	__asm call dword ptr[func]
}

template < class T, class Tp1, class Tp2 >
inline LPVOID ThisCall2( T func, LPVOID pThis, Tp1 lpParam1, Tp2 lpParam2 )
{	
	__asm push dword ptr[lpParam2]
	__asm push dword ptr[lpParam1]
	__asm mov ecx, pThis
	//__asm push eax
	__asm call dword ptr[func]
}

template < class T, class Tp1, class Tp2, class Tp3  >
inline LPVOID ThisCall3( T func, LPVOID pThis, Tp1 lpParam1, Tp2 lpParam2, Tp3 lpParam3 )
{	
	__asm push dword ptr[lpParam3]
	__asm push dword ptr[lpParam2]
	__asm push dword ptr[lpParam1]
	__asm mov ecx, pThis
	//__asm push eax
	__asm call dword ptr[func]
}

template < class T, class Tp1, class Tp2, class Tp3, class Tp4 >
inline LPVOID ThisCall4( T func, LPVOID pThis, Tp1 lpParam1, Tp2 lpParam2, Tp3 lpParam3, Tp4 lpParam4 )
{	
	__asm push dword ptr[lpParam4]
	__asm push dword ptr[lpParam3]
	__asm push dword ptr[lpParam2]
	__asm push dword ptr[lpParam1]
	__asm mov ecx, pThis
	//__asm push eax
	__asm call dword ptr[func]
}

template < class T, class Tp1, class Tp2, class Tp3, class Tp4, class Tp5 >
inline LPVOID ThisCall5( T func, LPVOID pThis, Tp1 lpParam1, Tp2 lpParam2, Tp3 lpParam3, Tp4 lpParam4, Tp5 lpParam5 )
{	
	__asm push dword ptr[lpParam5]
	__asm push dword ptr[lpParam4]
	__asm push dword ptr[lpParam3]
	__asm push dword ptr[lpParam2]
	__asm push dword ptr[lpParam1]
	__asm mov ecx, pThis
	//__asm push eax
	__asm call dword ptr[func]
}

template < class T >
inline LPVOID	F2P( T func )
{
	__asm mov eax, dword ptr[func];
}

class xEvent
{
public:
	xEvent()
	{
		m_lpThis = NULL;
		m_lpFunc = NULL;
	}

	template <class T>
	xEvent(LPVOID lpThis, T func)
	{
		m_lpThis = lpThis;
		m_lpFunc = F2P(func);
	}

	LPVOID getThisPtr(){ return m_lpThis;}
	VOID	setThisPtr( LPVOID lpThis ){ m_lpThis = lpThis;}

	LPVOID getFuncPtr(){ return m_lpFunc;}
	template <class T>	VOID	setFuncPtr( T func ){ m_lpFunc = F2P( func );}

	LPVOID call()
	{
		if( !Assigned() )return NULL;
		return ThisCall0( m_lpFunc, m_lpThis );
	}

	template < class Tp1 >
	LPVOID call( Tp1 lpParam1 )
	{
		if( !Assigned() )return NULL;
		return ThisCall1( m_lpFunc, m_lpThis, lpParam1 );
	}
	template < class Tp1, class Tp2 >
	LPVOID call( Tp1 lpParam1, Tp2 lpParam2 )
	{
		if( !Assigned() )return NULL;
		return ThisCall2( m_lpFunc, m_lpThis, lpParam1, lpParam2 );
	}
	template < class Tp1, class Tp2, class Tp3 >
	LPVOID call( Tp1 lpParam1, Tp2 lpParam2, Tp3 lpParam3 )
	{
		if( !Assigned() )return NULL;
		return ThisCall3( m_lpFunc, m_lpThis, lpParam1, lpParam2, lpParam3 );
	}
	template < class Tp1, class Tp2, class Tp3, class Tp4 >
	LPVOID call( Tp1 lpParam1, Tp2 lpParam2, Tp3 lpParam3, Tp4 lpParam4 )
	{
		if( !Assigned() )return NULL;
		return ThisCall4( m_lpFunc, m_lpThis, lpParam1, lpParam2, lpParam3, lpParam4 );
	}
	template < class Tp1, class Tp2, class Tp3, class Tp4, class Tp5 >
	LPVOID call( Tp1 lpParam1, Tp2 lpParam2, Tp3 lpParam3, Tp4 lpParam4, Tp5 lpParam5 )
	{
		if( !Assigned() )return NULL;
		return ThisCall5( m_lpFunc, m_lpThis, lpParam1, lpParam2, lpParam3, lpParam4, lpParam5 );
	}

	template < class TTHIS >
	LPVOID callWithThis(TTHIS * pThis)
	{
		if( !Assigned() )return NULL;
		return ThisCall0( m_lpFunc, pThis );
	}	
	template < class TTHIS, class Tp1 >
	LPVOID callWithThis( TTHIS * pThis, Tp1 lpParam1 )
	{
		if( !Assigned() )return NULL;
		return ThisCall1( m_lpFunc, pThis, lpParam1 );
	}
	template < class TTHIS, class Tp1, class Tp2 >
	LPVOID callWithThis( TTHIS * pThis, Tp1 lpParam1, Tp2 lpParam2 )
	{
		if( !Assigned() )return NULL;
		return ThisCall2( m_lpFunc, pThis, lpParam1, lpParam2 );
	}
	template < class TTHIS, class Tp1, class Tp2, class Tp3 >
	LPVOID callWithThis( TTHIS * pThis, Tp1 lpParam1, Tp2 lpParam2, Tp3 lpParam3 )
	{
		if( !Assigned() )return NULL;
		return ThisCall3( m_lpFunc, pThis, lpParam1, lpParam2, lpParam3 );
	}
	template < class TTHIS, class Tp1, class Tp2, class Tp3, class Tp4 >
	LPVOID callWithThis( TTHIS * pThis, Tp1 lpParam1, Tp2 lpParam2, Tp3 lpParam3, Tp4 lpParam4 )
	{
		if( !Assigned() )return NULL;
		return ThisCall4( m_lpFunc, pThis, lpParam1, lpParam2, lpParam3, lpParam4 );
	}
	template < class TTHIS, class Tp1, class Tp2, class Tp3, class Tp4, class Tp5 >
	LPVOID callWithThis( TTHIS * pThis, Tp1 lpParam1, Tp2 lpParam2, Tp3 lpParam3, Tp4 lpParam4, Tp5 lpParam5 )
	{
		if( !Assigned() )return NULL;
		return ThisCall5( m_lpFunc, pThis, lpParam1, lpParam2, lpParam3, lpParam4, lpParam5 );
	}


	xEvent & operator =( xEvent & thiscall )
	{
		this->m_lpFunc = thiscall.m_lpFunc;
		this->m_lpThis = thiscall.m_lpThis;
		return *this;
	}

	BOOL	Assigned(){ return (m_lpFunc != NULL);}
protected:
	LPVOID m_lpThis;
	LPVOID m_lpFunc;
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -