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

📄 comm.h

📁 用bcb6.0修改了原来用delphi编的spcomm
💻 H
字号:
//---------------------------------------------------------------------------

//#ifndef commH
//#define commH
///////////////////CommX.h///////////////////////////////////////////////////
//Author:agzxp@163.com 
//Date:2008.3.18 
// 
//--------------------------------------------------------------------------- 
#ifndef commH
#define commH
//--------------------------------------------------------------------------- 
#include  <SysUtils.hpp> 
#include  <Classes.hpp> 
#include  <Dialogs.hpp> 
#include  <Forms.hpp> 
#include  <Controls.hpp> 
#include  <Graphics.hpp> 
#include  <Messages.hpp> 
#include  <Windows.hpp> 
#include  <SysInit.hpp> 
#include  <System.hpp> 
//--------------------------------------------------------------------------- 

//-- var, const, procedure --------------------------------------------------- 
static const Word PWM_GOTCOMMDATA = WM_USER + 10001; 
static const Word PWM_RECEIVEERROR = WM_USER + 10002; 
static const Word PWM_REQUESTHANGUP = WM_USER + 10003; 
static const Word PWM_MODEMSTATECHANGE = WM_USER + 10004; 
static const Word PWM_SENDDATAEMPTY = WM_USER + 10005; 
static const Word PWM_COMMWRITE = WM_USER + 10006; 
static const Shortint ME_CTS = 0x1; 
static const Shortint ME_DSR = 0x2; 
static const Shortint ME_RING = 0x4; 
static const Shortint ME_RLSD = 0x8; 
static const Word INPUTBUFFERSIZE = 0x800; 
extern PACKAGE void __fastcall Register(void); 

//-- type declarations ------------------------------------------------------- 
#pragma option push -b- 
enum TParity { None, Odd, Even, Mark, Space }; 
#pragma option pop 

#pragma option push -b- 
enum TStopBits { _1, _1_5, _2 }; 
#pragma option pop 

#pragma option push -b- 
enum TByteSize { _5, _6, _7, _8 }; 
#pragma option pop 

#pragma option push -b- 
enum TDtrControl { DtrEnable, DtrDisable, DtrHandshake }; 
#pragma option pop 

#pragma option push -b- 
enum TRtsControl { RtsEnable, RtsDisable, RtsHandshake, RtsTransmissionAvailable }; 
#pragma option pop 

//--------------------------------------------------------------------------- 

typedef void __fastcall (__closure *TReceiveDataEvent)(System::TObject* Sender, char/*void*/ * Buffer, Word BufferLength); 

typedef void __fastcall (__closure *TReceiveErrorEvent)(System::TObject* Sender, DWORD EventMask); 

typedef void __fastcall (__closure *TModemStateChangeEvent)(System::TObject* Sender, DWORD ModemEvent); 

typedef void __fastcall (__closure *TSendDataEmptyEvent)(System::TObject* Sender); 
//--------------------------------------------------------------------------- 

class PACKAGE ECommsError : public Sysutils::Exception 
{ 
public: 
#pragma option push -w-inl 
/* Exception.Create */ inline __fastcall ECommsError(const AnsiString Msg) : Sysutils::Exception(Msg) { } 
#pragma option pop 
#pragma option push -w-inl 
/* Exception.CreateFmt */ inline __fastcall ECommsError(const AnsiString Msg, const System::TVarRec * Args, const int Args_Size) : Sysutils::Exception(Msg, Args, Args_Size) { } 
#pragma option pop 
#pragma option push -w-inl 
/* Exception.CreateRes */ inline __fastcall ECommsError(int Ident)/* overload */ : Sysutils::Exception(Ident) { } 
#pragma option pop 
#pragma option push -w-inl 
/* Exception.CreateResFmt */ inline __fastcall ECommsError(int Ident, const System::TVarRec * Args, const int Args_Size)/* overload */ : Sysutils::Exception(Ident, Args, Args_Size) { } 
#pragma option pop 
#pragma option push -w-inl 
/* Exception.CreateHelp */ inline __fastcall ECommsError(const AnsiString Msg, int AHelpContext) : Sysutils::Exception(Msg, AHelpContext) { } 
#pragma option pop 
#pragma option push -w-inl 
/* Exception.CreateFmtHelp */ inline __fastcall ECommsError(const AnsiString Msg, const System::TVarRec * Args, const int Args_Size, int AHelpContext) : Sysutils::Exception(Msg, Args, Args_Size, AHelpContext) { } 
#pragma option pop 
#pragma option push -w-inl 
/* Exception.CreateResHelp */ inline __fastcall ECommsError(int Ident, int AHelpContext)/* overload */ : Sysutils::Exception(Ident, AHelpContext) { } 
#pragma option pop 
#pragma option push -w-inl 
/* Exception.CreateResFmtHelp */ inline __fastcall ECommsError(System::PResStringRec ResStringRec, const System::TVarRec * Args, const int Args_Size, int AHelpContext)/* overload */ : Sysutils::Exception(ResStringRec, Args, Args_Size, AHelpContext) { } 
#pragma option pop 

public: 
#pragma option push -w-inl 
/* TObject.Destroy */ inline __fastcall virtual ~ECommsError(void) { } 
#pragma option pop 
}; 
//--------------------------------------------------------------------------- 

class PACKAGE TReadThread : public Classes::TThread 
{ 
protected: 
virtual void __fastcall Execute(void); 

public: 
HANDLE hCommFile; 
HANDLE hCloseEvent; 
HANDLE hComm32Window; 
     
bool __fastcall SetupCommEvent(Windows::POverlapped lpOverlappedCommEvent, DWORD &lpfdwEvtMask); 
bool __fastcall SetupReadEvent(Windows::POverlapped lpOverlappedRead, char * lpszInputBuffer, DWORD dwSizeofBuffer, DWORD &lpnNumberOfBytesRead); 
bool __fastcall HandleCommEvent(Windows::POverlapped lpOverlappedCommEvent, DWORD &lpfdwEvtMask, bool fRetrieveEvent); 
bool __fastcall HandleReadEvent(Windows::POverlapped lpOverlappedRead, char * lpszInputBuffer, DWORD dwSizeofBuffer, DWORD &lpnNumberOfBytesRead); 
bool __fastcall HandleReadData(char * lpszInputBuffer, DWORD dwSizeofBuffer); 
bool __fastcall ReceiveData(char * lpNewString, DWORD dwSizeofNewString); 
bool __fastcall ReceiveError(DWORD EvtMask); 
bool __fastcall ModemStateChange(DWORD ModemEvent); 
void __fastcall PostHangupCall(void); 

public: 
#pragma option push -w-inl 
/* TThread.Create */ inline __fastcall TReadThread(bool CreateSuspended) : Classes::TThread(CreateSuspended) { } 
#pragma option pop 
#pragma option push -w-inl 
/* TThread.Destroy */ inline __fastcall virtual ~TReadThread(void) { } 
#pragma option pop 
}; 
//--------------------------------------------------------------------------- 

class PACKAGE TWriteThread : public Classes::TThread 
{ 
protected: 
virtual void __fastcall Execute(void); 
bool __fastcall HandleWriteData(OVERLAPPED OverlappedWrite, char * pDataToWrite, DWORD dwNumberOfBytesToWrite); 

public: 
HANDLE hCommFile; 
HANDLE hCloseEvent;
HANDLE hComm32Window; 
bool *pFSendDataEmpty; 
void __fastcall PostHangupCall(void); 

public: 
#pragma option push -w-inl 
/* TThread.Create */ inline __fastcall TWriteThread(bool CreateSuspended) : Classes::TThread(CreateSuspended) { } 
#pragma option pop 
#pragma option push -w-inl 
/* TThread.Destroy */ inline __fastcall virtual ~TWriteThread(void) { } 
#pragma option pop 
}; 
//---------------------------------------------------------------------------
class PACKAGE TCommX : public TComponent 
{ 
private: 
    TReadThread* ReadThread; 
TWriteThread* WriteThread; 

HANDLE hCommFile; 
HANDLE hCloseEvent; 
HANDLE FHWnd; 
bool FSendDataEmpty; 
AnsiString FCommName; 
DWORD FBaudRate; 
bool FParityCheck; 
bool FOutx_CtsFlow; 
bool FOutx_DsrFlow; 
TDtrControl FDtrControl; 
bool FDsrSensitivity; 
bool FTxContinueOnXoff; 
bool FOutx_XonXoffFlow; 
bool FInx_XonXoffFlow; 
bool FReplaceWhenParityError; 
bool FIgnoreNullChar; 
TRtsControl FRtsControl; 
Word FXonLimit; 
Word FXoffLimit; 
TByteSize FByteSize; 
TParity FParity; 
TStopBits FStopBits; 

char FXonChar; 
char FXoffChar; 
char FReplacedChar; 

DWORD FReadIntervalTimeout; 
DWORD FReadTotalTimeoutMultiplier; 
DWORD FReadTotalTimeoutConstant; 
DWORD FWriteTotalTimeoutMultiplier; 
DWORD FWriteTotalTimeoutConstant; 

TReceiveDataEvent FOnReceiveData; 
Classes::TNotifyEvent FOnRequestHangup; 
TReceiveErrorEvent FOnReceiveError; 
TModemStateChangeEvent FOnModemStateChange; 
TSendDataEmptyEvent FOnSendDataEmpty; 

void __fastcall SetBaudRate(DWORD Rate); 
void __fastcall SetParityCheck(bool b); 
void __fastcall SetOutx_CtsFlow(bool b); 
void __fastcall SetOutx_DsrFlow(bool b); 
void __fastcall SetDtrControl(TDtrControl c); 
void __fastcall SetDsrSensitivity(bool b); 
void __fastcall SetTxContinueOnXoff(bool b); 
void __fastcall SetOutx_XonXoffFlow(bool b); 
void __fastcall SetInx_XonXoffFlow(bool b); 
void __fastcall SetReplaceWhenParityError(bool b); 
void __fastcall SetIgnoreNullChar(bool b); 
void __fastcall SetRtsControl(TRtsControl c); 
void __fastcall SetXonLimit(Word Limit); 
void __fastcall SetXoffLimit(Word Limit); 
void __fastcall SetByteSize(TByteSize Size); 
void __fastcall SetParity(TParity p); 
void __fastcall SetStopBits(TStopBits Bits); 
void __fastcall SetXonChar(char c); 
void __fastcall SetXoffChar(char c); 
void __fastcall SetReplacedChar(char c); 
void __fastcall SetReadIntervalTimeout(DWORD v); 
void __fastcall SetReadTotalTimeoutMultiplier(DWORD v); 
void __fastcall SetReadTotalTimeoutConstant(DWORD v); 
void __fastcall SetWriteTotalTimeoutMultiplier(DWORD v); 
void __fastcall SetWriteTotalTimeoutConstant(DWORD v); 
void __fastcall CommWndProc(Messages::TMessage &msg); 
void __fastcall _SetCommState(void); 
void __fastcall _SetCommTimeout(void); 
     
protected: 
    void __fastcall CloseReadThread(void); 
void __fastcall CloseWriteThread(void); 
void __fastcall ReceiveData(char * Buffer, Word BufferLength); 
void __fastcall ReceiveError(DWORD EvtMask); 
void __fastcall ModemStateChange(DWORD ModemEvent); 
void __fastcall RequestHangup(void); 
void __fastcall _SendDataEmpty(void); 

public: 
    __property HANDLE Handle = {read=hCommFile, nodefault}; 
__property bool SendDataEmpty = {read=FSendDataEmpty, nodefault}; 

void __fastcall StartComm(void); 
void __fastcall StopComm(void); 
bool __fastcall WriteCommData(char * pDataToWrite, Word dwSizeofDataToWrite); 
DWORD __fastcall GetModemState(void); 

    __fastcall TCommX(TComponent* Owner); 
    __fastcall ~TCommX(void); 
     
__published: 
    __property AnsiString CommName = {read=FCommName, write=FCommName}; 
__property DWORD BaudRate = {read=FBaudRate, write=SetBaudRate, nodefault}; 
__property bool ParityCheck = {read=FParityCheck, write=SetParityCheck, nodefault}; 
__property bool Outx_CtsFlow = {read=FOutx_CtsFlow, write=SetOutx_CtsFlow, nodefault}; 
__property bool Outx_DsrFlow = {read=FOutx_DsrFlow, write=SetOutx_DsrFlow, nodefault}; 
__property TDtrControl DtrControl = {read=FDtrControl, write=SetDtrControl, nodefault}; 
__property bool DsrSensitivity = {read=FDsrSensitivity, write=SetDsrSensitivity, nodefault}; 
__property bool TxContinueOnXoff = {read=FTxContinueOnXoff, write=SetTxContinueOnXoff, nodefault}; 
__property bool Outx_XonXoffFlow = {read=FOutx_XonXoffFlow, write=SetOutx_XonXoffFlow, nodefault}; 
__property bool Inx_XonXoffFlow = {read=FInx_XonXoffFlow, write=SetInx_XonXoffFlow, nodefault}; 
__property bool ReplaceWhenParityError = {read=FReplaceWhenParityError, write=SetReplaceWhenParityError, nodefault}; 
__property bool IgnoreNullChar = {read=FIgnoreNullChar, write=SetIgnoreNullChar, nodefault}; 
__property TRtsControl RtsControl = {read=FRtsControl, write=SetRtsControl, nodefault}; 
__property Word XonLimit = {read=FXonLimit, write=SetXonLimit, nodefault}; 
__property Word XoffLimit = {read=FXoffLimit, write=SetXoffLimit, nodefault}; 
__property TByteSize ByteSize = {read=FByteSize, write=SetByteSize, nodefault}; 
__property TParity Parity = {read=FParity, write=FParity, nodefault}; 
__property TStopBits StopBits = {read=FStopBits, write=SetStopBits, nodefault}; 
__property char XonChar = {read=FXonChar, write=SetXonChar, nodefault}; 
__property char XoffChar = {read=FXoffChar, write=SetXoffChar, nodefault}; 
__property char ReplacedChar = {read=FReplacedChar, write=SetReplacedChar, nodefault}; 
__property DWORD ReadIntervalTimeout = {read=FReadIntervalTimeout, write=SetReadIntervalTimeout, nodefault}; 
__property DWORD ReadTotalTimeoutMultiplier = {read=FReadTotalTimeoutMultiplier, write=SetReadTotalTimeoutMultiplier, nodefault}; 
__property DWORD ReadTotalTimeoutConstant = {read=FReadTotalTimeoutConstant, write=SetReadTotalTimeoutConstant, nodefault}; 
__property DWORD WriteTotalTimeoutMultiplier = {read=FWriteTotalTimeoutMultiplier, write=SetWriteTotalTimeoutMultiplier, nodefault}; 
__property DWORD WriteTotalTimeoutConstant = {read=FWriteTotalTimeoutConstant, write=SetWriteTotalTimeoutConstant, nodefault}; 

__property TReceiveDataEvent OnReceiveData = {read=FOnReceiveData, write=FOnReceiveData}; 
__property TReceiveErrorEvent OnReceiveError = {read=FOnReceiveError, write=FOnReceiveError}; 
__property TModemStateChangeEvent OnModemStateChange = {read=FOnModemStateChange, write=FOnModemStateChange}; 
__property Classes::TNotifyEvent OnRequestHangup = {read=FOnRequestHangup, write=FOnRequestHangup}; 
__property TSendDataEmptyEvent OnSendDataEmpty = {read=FOnSendDataEmpty, write=FOnSendDataEmpty}; 
}; 
//--------------------------------------------------------------------------- 
#endif

⌨️ 快捷键说明

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