我用的是 C++ Builder 的哥哥 Borland C++ 5 编的串口类,
使用非常简单,稍加改动就可以在 C++ Builder 里面运行,
因为 C++ Builder 仍然用的是 Borland C++ 5.x 的编译器,
这里有完整的代码,如果发现有bug请告诉我,同样我也会
感谢你的,因为这段代码正在使用中。
class TCommQueue
{
public:
TCommQueue(long BufSize=8192);
virtual ~TCommQueue();
long In(char far *s, long n=1); //RetVal: num of chars pushed in
long Out(char far *s, long n=1); //RetVal: num of chars poped out
long Read(char far *s, long n=1, long Offs=0); //RetVal: num of chars read
protected:
long _BufSize, _First, _Count;
char far *_Buffer;
};
//-----------------------------------------------------------------//
// To use TComm32, The message WM_COMMNOTIFY must be processed //
// in the user's window as following: //
//-----------------------------------------------------------------//
// EV_MESSAGE(WM_COMMNOTIFY, EvCommNotify), //
// LRESULT TUserWindow::EvCommNotify(WPARAM wParam, LPARAM lParam) //
// { //
// ((TComm32 *)lParam)->CommNotify(wParam); //
// ... ... // add your code here (bytes received or transed) //
// return true; //
// } //
//-----------------------------------------------------------------//
class TComm32
{
public:
TComm32(TWindow *Win);
virtual ~TComm32();
virtual int SetPort(int COMn);
virtual int SetParams(DWORD Baud, BYTE Parity, BYTE ByteSize, BYTE StopBits);
virtual int SetBufSize(long InBufSize, long OutBufSize, long HwInSize, long HwOutSize);
virtual int Open(void);
virtual int Close(void);
virtual int Opened(void) { return Handle!=INVALID_HANDLE_VALUE; }
virtual long Read(char far *s, long n=1);
virtual long Write(char far *s, long n=1);
virtual void CommNotify(int NotifyType); //EV_RXCHAR or EV_TXEMPTY