如何解决串行通信程序的控件问题?? 用API吧,没有几个。这个控件要手工添加到工程里,工程---添加----控件----找到mccomm控件----确定。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼上的人说的很详细!不过这个我做过,如果你是想通过传送一些数据(如ASCII)的话我有代码的 我给你个最简单的代码,那个控件不好用,呵呵。如果要复杂点的,比如用线程方式的,也可以给你。 这段代码我正用于控制单篇机,效果不错,呵呵。// COM.cpp: implementation of the CCOM class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "Radio.h"#include "COM.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CCOM::CCOM(){ m_bConnected=FALSE;}CCOM::~CCOM(){ if(m_hCom !=NULL) CloseHandle(m_hCom);}void CCOM::CloseConnect(){ CloseHandle(m_hCom);}void CCOM::OpenConnect(){ COMMTIMEOUTS TimeOuts; if(m_bConnected) return ; m_hCom=CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , NULL); // 重叠方式 if(m_hCom==INVALID_HANDLE_VALUE) { AfxMessageBox("不能打开COM1"); return ; } m_bConnected = TRUE; SetupComm(m_hCom,MAXBLOCK,MAXBLOCK); SetCommMask(m_hCom,EV_RXCHAR); TimeOuts.ReadIntervalTimeout=MAXDWORD; TimeOuts.ReadTotalTimeoutMultiplier=0; TimeOuts.ReadTotalTimeoutConstant=0; /* 设置写超时以指定WriteComm成员函数中的GetOverlappedResult函数的等待时间*/ TimeOuts.WriteTotalTimeoutMultiplier=50; TimeOuts.WriteTotalTimeoutConstant=2000; SetCommTimeouts(m_hCom, &TimeOuts); DCB dcb; if(!GetCommState(m_hCom, &dcb)) return; dcb.fBinary=TRUE; dcb.BaudRate=9600; // 波特率 dcb.ByteSize=8; // 每字节位数 dcb.fParity=TRUE; dcb.Parity=NOPARITY; dcb.StopBits=ONESTOPBIT; SetCommState(m_hCom, &dcb);}DWORD CCOM::WriteComm(BYTE* buf,DWORD len){ Sleep(200); BOOL fState; DWORD length=len; COMSTAT ComStat; DWORD dwErrorFlags; ClearCommError(m_hCom,&dwErrorFlags,&ComStat); fState=WriteFile(m_hCom,buf,length,&length,NULL); if(!fState) { if(GetLastError()==ERROR_IO_PENDING) { // GetOverlappedResult(m_hCom,&m_osWrite,&length,TRUE);// 等待 } else length=0; AfxMessageBox("写COM1出错"); } return length;}DWORD CCOM::ReadComm(BYTE* buf,DWORD len){ Sleep(200); DWORD length=0; COMSTAT ComStat; DWORD dwErrorFlags; ClearCommError(m_hCom,&dwErrorFlags,&ComStat); if(ComStat.cbOutQue>0) PurgeComm(m_hCom,PURGE_TXCLEAR); length=min(len, ComStat.cbInQue); ReadFile(m_hCom,buf,length,&length,NULL); return length;} 关于QQ服务器设计的问题 熟练掌握数据结构和常用算法? 类似傲游 或者 IE7 的检索一个网页中是否含有RSS源,如果含有源工具栏的RSS源 图标就变成可用的,请问它们是怎么检索网页含有源的? 显示PNG文件时怎么显示有透明度的图片? 在模态对话框调用另一个对话框里函数问题 无原由的丢失信息! 如何实现类似于CS中的控制台程序 error:请教 光滑曲线 你们平时还上哪些其它的VC论坛? 请教一下:怎样把基于单文档的应用程序的视图清空 急问关于消息处理
不过这个我做过,如果你是想通过传送一些数据(如ASCII)的话我有代码的
这段代码我正用于控制单篇机,效果不错,呵呵。
// COM.cpp: implementation of the CCOM class.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "Radio.h"
#include "COM.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////CCOM::CCOM()
{
m_bConnected=FALSE;}CCOM::~CCOM()
{
if(m_hCom !=NULL)
CloseHandle(m_hCom);}
void CCOM::CloseConnect()
{
CloseHandle(m_hCom);
}
void CCOM::OpenConnect()
{
COMMTIMEOUTS TimeOuts;
if(m_bConnected)
return ; m_hCom=CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , NULL); // 重叠方式 if(m_hCom==INVALID_HANDLE_VALUE)
{
AfxMessageBox("不能打开COM1");
return ;
}
m_bConnected = TRUE;
SetupComm(m_hCom,MAXBLOCK,MAXBLOCK);
SetCommMask(m_hCom,EV_RXCHAR);
TimeOuts.ReadIntervalTimeout=MAXDWORD; TimeOuts.ReadTotalTimeoutMultiplier=0; TimeOuts.ReadTotalTimeoutConstant=0; /* 设置写超时以指定WriteComm成员函数中的GetOverlappedResult函数的等待时间*/ TimeOuts.WriteTotalTimeoutMultiplier=50; TimeOuts.WriteTotalTimeoutConstant=2000; SetCommTimeouts(m_hCom, &TimeOuts); DCB dcb;
if(!GetCommState(m_hCom, &dcb))
return; dcb.fBinary=TRUE; dcb.BaudRate=9600; // 波特率 dcb.ByteSize=8; // 每字节位数 dcb.fParity=TRUE;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
SetCommState(m_hCom, &dcb);
}
DWORD CCOM::WriteComm(BYTE* buf,DWORD len)
{
Sleep(200);
BOOL fState;
DWORD length=len;
COMSTAT ComStat;
DWORD dwErrorFlags;
ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
fState=WriteFile(m_hCom,buf,length,&length,NULL);
if(!fState)
{
if(GetLastError()==ERROR_IO_PENDING)
{ // GetOverlappedResult(m_hCom,&m_osWrite,&length,TRUE);// 等待
}
else
length=0;
AfxMessageBox("写COM1出错");
}
return length;
}
DWORD CCOM::ReadComm(BYTE* buf,DWORD len)
{
Sleep(200);
DWORD length=0; COMSTAT ComStat; DWORD dwErrorFlags; ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
if(ComStat.cbOutQue>0)
PurgeComm(m_hCom,PURGE_TXCLEAR); length=min(len, ComStat.cbInQue); ReadFile(m_hCom,buf,length,&length,NULL);
return length;
}