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

📄 pipe.h

📁 这是一本学习 window编程的很好的参考教材
💻 H
字号:
/*** Disclaimer ******************************************************************/
/*                                                                               */
/*  Win32 Named Pipe Wrapper                          (C) Clemens Fischer 2001   */
/*                                                                               */
/*  THE CODE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,                   */
/*  EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO WARRANTIES          */
/*  OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.                      */
/*  IN NO EVENT WILL THE AUTHOR OR AUTHORS BE LIABLE TO YOU FOR ANY DAMAGES,     */
/*  INCLUDING INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF THE USE        */
/*  OF THE CODE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.             */
/*  YOU ACKNOWLEDGE THAT YOU HAVE READ THIS LICENSE, UNDERSTAND IT AND AGREE     */
/*  TO BE BOUND BY ITS TERMS AS THE COMPLETE AND EXCLUSIVE STATEMENT OF          */
/*  THE AGREEMENT BETWEEN US, SUPERSEDING ANY PROPOSAL OR PRIOR AGREEMENT,       */
/*  ORAL OR WRITTEN, AND ANY OTHER COMMUNICATIONS BETWEEN US RELATING            */
/*  TO THE SUBJECT MATTER OF THIS LICENSE.                                       */
/*                                                                               */
/*********************************************************************************/

#ifndef		__PIPE_CLASS__
#define		__PIPE_CLASS__

#define		PIPE_MAX_READ_BUFFER_SIZE		0xFFF

// Pipe errors

enum
{
	PIPE_ERROR_SUCCESS						= 0x40000000 ,		// Success
	PIPE_ERROR_NAME_ALREADY_EXISTS						 ,		// The specified pipe name already exists
	PIPE_ERROR_NAME_REGISTRATION_FAILED				     ,		// The pipe name registration failed 
	PIPE_ERROR_NAME_DOES_NOT_EXISTS						 ,		// The specified pipe name doesn磘 exists
	PIPE_ERROR_NAME_UNREGISTRATIONS_FAILED				 , 		// The pipe name unregistration failed 
	PIPE_ERROR_CREATION_FAILED							 ,		// Pipe creation failed
	PIPE_ERROR_CALLBACK									 ,		// Error related to callback
	PIPE_ERROR_READ_FAILED								 ,		// Error while reading from pipe
	PIPE_ERROR_WRITE_FAILED								 ,		// Error while Wrinting to pipe
	PIPE_CREATE_ALREADY_CALLED									// Create was already called
};

// Pipe access modes

enum
{			
	PIPE_READ								= 0x01	,			// Grant client read access
	PIPE_WRITE													// Grant client write access
};

typedef		UINT(*PIPE_CALLBACK)	( LPVOID pParam , LPVOID Buffer , DWORD dwLength );

class cPipe 
{
	private :
		
		CString				m_GUID;
		CString				m_SubKey;
		int					m_LastError;

		CString				m_PipeName;			
		DWORD				m_dwDesiredAccess;
		BOOL				m_bServerSide;
		PIPE_CALLBACK		m_CallBackFunc;
		LPVOID				m_pCallBackParam;

		BOOL				m_bCreateCalled;
		BOOL				m_bCloseCalled;
		BOOL				m_bPipeRegistered;

		HANDLE				m_hReadPipe;
		HANDLE				m_hWritePipe;
		HANDLE				m_hClientReadPipe;
		HANDLE				m_hClientWritePipe;
		HANDLE				m_hMutex;

		BOOL				*m_pbVaildPtr;
		BOOL				m_bVaildThread;
		BOOL				m_bRunThread;

		// Private operations 

		BOOL				RegisterPipe		( void );
		BOOL				UnRegisterPipe		( void );
		BOOL				UpdateRegistration	( void );
		BOOL				RetrievePipe		( void );
		
		BOOL				CallBack			( void );

		void				SetLastError		( int nErrorCode );

		static UINT			CallBackThread		( LPVOID pParam );

	public :

							cPipe				( void );		
							~cPipe				( void );
	
		// Public operations

		BOOL				Create				( CString PipeName , DWORD dwDesiredAccess = PIPE_READ | PIPE_WRITE , BOOL bServerSide = TRUE , PIPE_CALLBACK CallBackFunc = NULL , LPVOID pCallBackParam = NULL );
		BOOL				ReadPipe			( LPVOID Buffer , DWORD nNumberOfBytesToRead , DWORD* lpNumberOfBytesRead );
		BOOL				WritePipe			( LPVOID Buffer , DWORD nNumberOfBytesToWrite );
		void				Close				( void );

		int					GetLastError		( void );
};

#endif

⌨️ 快捷键说明

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