帮忙推荐个串口控件

Simon_Jia 2005-08-30 04:44:36
大家帮忙推荐个自己用过的串口控件吧,要自己用过没出现过什么问题,觉得好用的哦!谢谢了!
最好能提供下载地址或能给我mail过来...要求是不是有点儿过分了,呵呵
...全文
350 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomatian 2005-09-23
  • 打赏
  • 举报
回复
MSCOMM,安装了vb就有了,在cb中添加一下就可以了
closeing 2005-09-23
  • 打赏
  • 举报
回复
关注一下
MEFULEU 2005-09-01
  • 打赏
  • 举报
回复
// Borland C++ Builder
// Copyright (c) 1995, 2002 by Borland Software Corporation
// All rights reserved

// (DO NOT EDIT: machine generated header) 'KComm.pas' rev: 6.00

#ifndef KCommHPP
#define KCommHPP

#pragma delphiheader begin
#pragma option push -w-
#pragma option push -Vx
#include <Forms.hpp> // Pascal unit
#include <Windows.hpp> // Pascal unit
#include <Messages.hpp> // Pascal unit
#include <Classes.hpp> // Pascal unit
#include <SysUtils.hpp> // Pascal unit
#include <SysInit.hpp> // Pascal unit
#include <System.hpp> // Pascal unit

//-- user supplied -----------------------------------------------------------

namespace Kcomm
{
//-- type declarations -------------------------------------------------------
class DELPHICLASS ECommError;
class PASCALIMPLEMENTATION ECommError : public Sysutils::Exception
{
typedef Sysutils::Exception inherited;

public:
int ErrorCode;
public:
#pragma option push -w-inl
/* Exception.Create */ inline __fastcall ECommError(const AnsiString Msg) : Sysutils::Exception(Msg) { }
#pragma option pop
#pragma option push -w-inl
/* Exception.CreateFmt */ inline __fastcall ECommError(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 ECommError(int Ident)/* overload */ : Sysutils::Exception(Ident) { }
#pragma option pop
#pragma option push -w-inl
/* Exception.CreateResFmt */ inline __fastcall ECommError(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 ECommError(const AnsiString Msg, int AHelpContext) : Sysutils::Exception(Msg, AHelpContext) { }
#pragma option pop
#pragma option push -w-inl
/* Exception.CreateFmtHelp */ inline __fastcall ECommError(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 ECommError(int Ident, int AHelpContext)/* overload */ : Sysutils::Exception(Ident, AHelpContext) { }
#pragma option pop
#pragma option push -w-inl
/* Exception.CreateResFmtHelp */ inline __fastcall ECommError(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 ~ECommError(void) { }
#pragma option pop

};


#pragma option push -b-
enum TBaudrate { br110, br300, br600, br1200, br2400, br4800, br9600, br14400, br19200, br38400, br56000, br57600, br115200, br128000, br256000 };
#pragma option pop

#pragma option push -b-
enum TParity { paNone, paOdd, paEven, paMark, paSpace };
#pragma option pop

#pragma option push -b-
enum TStopbits { sb10, sb15, sb20 };
#pragma option pop

#pragma option push -b-
enum TDatabits { da4, da5, da6, da7, da8 };
#pragma option pop

#pragma option push -b-
enum TFlowControl { fcNone, fcCTS, fcDTR, fcSoftware, fcDefault };
#pragma option pop

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

typedef void __fastcall (__closure *TCommEvent)(System::TObject* Sender, int Count);

typedef void __fastcall (__closure *TOnStateEvent)(System::TObject* Sender, unsigned State);

class DELPHICLASS TReadThread;
class DELPHICLASS TKComm;
class PASCALIMPLEMENTATION TKComm : public Classes::TComponent
{
typedef Classes::TComponent inherited;

private:
unsigned hCommFile;
TReadThread* ReadThread;
int FWriteBufSize;
int FReadBufSize;
AnsiString FComPort;
TBaudrate FBaudRate;
TDatabits FDatabits;
TStopbits FStopbits;
TParity FParity;
int FWriteTimeout;
int FReadTimeout;
TReceiveDataEvent FOnRead;
TOnStateEvent FOnState;
void __fastcall SetBaudRate(const TBaudrate Value);
void __fastcall SetComPort(const AnsiString Value);
void __fastcall SetDatabits(const TDatabits Value);
void __fastcall SetReadBufSize(const int Value);
void __fastcall SetStopbits(const TStopbits Value);
void __fastcall SetWriteBufSize(const int Value);
void __fastcall SetParity(const TParity Value);
unsigned hEvent;

protected:
bool __fastcall GetModemState(int Index);
void __fastcall UpdateDataControlBlock(void);
void __fastcall UpdateCommTimeouts(void);
virtual void __fastcall CreateHandle(void);
void __fastcall DestroyHandle(void);
void __fastcall ReadPort(System::TObject* Sender);
void __fastcall ProcessOnState(System::TObject* Sender, unsigned State);
MESSAGE void __fastcall Emread(Messages::TMessage &Message);

public:
__fastcall virtual TKComm(Classes::TComponent* AOwner);
__fastcall virtual ~TKComm(void);
bool __fastcall OPened(void);
bool __fastcall OpenComm(void);
void __fastcall CloseComm(void);
int __fastcall Write(void *Buf, int Count);
int __fastcall InQueCount(void);
int __fastcall OutQueCount(void);
void __fastcall ClearComm(void);
void __fastcall SetDTRState(bool State);
void __fastcall SetRTSState(bool State);
__property bool CTS = {read=GetModemState, index=1, nodefault};
__property bool DSR = {read=GetModemState, index=2, nodefault};

__published:
__property int ReadTimeout = {read=FReadTimeout, write=FReadTimeout, default=200};
__property int WriteTimeout = {read=FWriteTimeout, write=FWriteTimeout, default=200};
__property TBaudrate BaudRate = {read=FBaudRate, write=SetBaudRate, default=6};
__property TDatabits Databits = {read=FDatabits, write=SetDatabits, default=4};
__property TStopbits Stopbits = {read=FStopbits, write=SetStopbits, default=0};
__property TParity Parity = {read=FParity, write=SetParity, default=0};
__property AnsiString ComPort = {read=FComPort, write=SetComPort};
__property int ReadBufSize = {read=FReadBufSize, write=SetReadBufSize, default=2048};
__property int WriteBufSize = {read=FWriteBufSize, write=SetWriteBufSize, default=2048};
__property TReceiveDataEvent OnRead = {read=FOnRead, write=FOnRead};
__property TOnStateEvent OnState = {read=FOnState, write=FOnState};
};


class PASCALIMPLEMENTATION TReadThread : public Classes::TThread
{
typedef Classes::TThread inherited;

private:
unsigned hCommFile;
TKComm* kcomm;
unsigned hEvent;
TOnStateEvent FOnState;
void __fastcall ReadPort(void);

protected:
void __fastcall BreakEvent(void);
virtual void __fastcall Execute(void);

public:
__fastcall TReadThread(unsigned Handle, TKComm* comm);
__fastcall virtual ~TReadThread(void);
__property TOnStateEvent OnState = {read=FOnState, write=FOnState};
};


//-- var, const, procedure ---------------------------------------------------
static const Word EM_ONREAD = 0x465;
extern PACKAGE void __fastcall Register(void);

} /* namespace Kcomm */
using namespace Kcomm;
#pragma option pop // -w-
#pragma option pop // -Vx

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif // KComm
leonatcs 2005-09-01
  • 打赏
  • 举报
回复
上面说的控件网上都有的下,随便搜搜就可以。

具体可以参见下面这些书:(我就看的第一本:))
http://www.dearbook.com.cn/book/viewbook.aspx?pno=TS004952
http://www.dearbook.com.cn/book/viewbook.aspx?pno=TS0022958
http://www.dearbook.com.cn/book/viewbook.aspx?pno=TS001037
leonatcs 2005-09-01
  • 打赏
  • 举报
回复
串口编程的四种方法

1.使用win32API函数 同步读写的例子如下:


//Open ComPort -------Sync(namely nonoverlaped)
HANDLE hCom;
hCom = CreateFile( "COM1",GENERIC_READ | GENERIC_WRITE,0,0,
OPEN_EXISTING,0,0);
if (hCom == INVALID_HANDLE_VALUE) return;

//Set DCB
TDCB dcb1;
GetCommState(hCom,&dcb1);
dcb1.BaudRate = 9600;
//and other settings...
SetCommState(hCom,&dcb1);

//Write to comport -------Sync(namely nonoverlaped)
unsigned long k = 0; // use by WriteFile/ReadFile function to return how many bytes are written/read.
char charY = 'Y'; //char to send/receive
WriteFile(hCom, &charY, sizeof(char), &k, NULL);

//Sleep(2000);

//Read from comport -------Sync(namely nonoverlaped)
COMSTAT ComStat;
DWORD dwErrorFlags;
ClearCommError(hCom,&dwErrorFlags,&ComStat);
k = 0;
if( ComStat.cbInQue > 0) //cbInQue是输入队列的长度。
ReadFile(hCom, &charY, sizeof(char), &k, NULL);
if (k) Null;//something been read into tempchar
else GetLastError();

//Close Comport
CloseHandle(hCom);


// 几个易混的数据结构
// TCommProp 通信接口的属性,定义了接口的能力,如最大波特率,通信设备类型。
// COMSTATE 串口的通信状态,例如是否在等待CTS信号,输入输出队列是否有数据。
// TDCB 串口的设备控制块,定义串口通信时使用的波特率,停止位,校验方法等。

2.使用控件:
BCB:
TComThread (http://www.mwowm.com/comthread/)
comm32bcb.zip
VictorComm
Delphi:
Spcomm
Both:
TurboPower Async Professional (Apro) 功能最为复杂和强大
Dejan Crnila's ComPort
VC:
Zcommex
ActiveX:
MSComm32.ocx 简单,常用

3.嵌入汇编。

4.VxD
befree 2005-09-01
  • 打赏
  • 举报
回复
关注一下
iec 2005-08-31
  • 打赏
  • 举报
回复
msComm比较好用,我一直在用,而且比较稳定,建议用MSCOMM控件.
netsys2 2005-08-31
  • 打赏
  • 举报
回复
用CB当然选Victor 串口 VCL 控件

还有源代码

http://www.cppfans.com/d_vcl_files/yb_comm_133.asp
psc88 2005-08-31
  • 打赏
  • 举报
回复
spcomm也可以
bubugao 2005-08-31
  • 打赏
  • 举报
回复
自己写的更好
webwalker 2005-08-31
  • 打赏
  • 举报
回复
我觉得msComm比较好,如果你使用过,你才会知道其中的奥妙

:)
hehe169 2005-08-31
  • 打赏
  • 举报
回复
用CB当然选Victor 串口 VCL 控件

还有源代码

http://www.cppfans.com/


同意同意
我一直用它!
挺好!
Simon_Jia 2005-08-31
  • 打赏
  • 举报
回复
弱弱的问一句,MSCOMM怎么用啊?BUILDER里面不是没有吗?怎么加到我工程里面来啊?
Rex_love_Burger 2005-08-31
  • 打赏
  • 举报
回复
确实mscomm不错。微软出品
我不懂电脑 2005-08-31
  • 打赏
  • 举报
回复
msComm比较好

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧