在CommProc()函数的实现上面添加下面这句:
#include "commDoc.h"
#include "commDoc.h"
解决方案 »
- VC++获取网页返回的JSON数据
- iwebbrowser2打开网页显示很慢,不完整?
- 急求,位图的问题,在线等!
- 郁闷,大虾帮忙啊?如何获得当前安装的软件列表啊,就像“添加删除程序”里显示的那些?
- 怎样做一个能在多分辨率下 任意系统字体下都能正常运行的对话框应用程序
- 求将三位整形数(0-999)转换为二位字符的例子,算法,并要求能将二位字符转换回三位整形数
- 一个关于图像的问题,请教高手,谢谢!
- 急急急!图象旋转的问题(已经旋转出了原来的平面)!
- VS2005 控制台开发
- 想用ZMPC OPC SERVER读取安川CP317数据怎么操作?
- 初来咋到,有个问题请教,怎么转移分,我还不知道
- 小弟刚学c++请多指教
在上面有#include "commDoc.h"语句
//#include "stdafx.h"
#include "comm.h"
#include "SetupDlg.h"
#include "commDoc.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CCommDocIMPLEMENT_DYNCREATE(CCommDoc, CDocument)BEGIN_MESSAGE_MAP(CCommDoc, CDocument)
//{{AFX_MSG_MAP(CCommDoc)
ON_COMMAND(ID_FILE_CONNECTION, OnFileConnection)
ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
ON_UPDATE_COMMAND_UI(ID_FILE_CLOSE, OnUpdateFileClose)
ON_UPDATE_COMMAND_UI(ID_FILE_CONNECTION, OnUpdateFileConnection)
ON_COMMAND(ID_FILE_SETTINGS, OnFileSettings)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CCommDoc construction/destructionCCommDoc::CCommDoc()
{
// TODO: add one-time construction code here
m_bConnected=FALSE;//
m_pThread=NULL;//线程
m_nBaud=9600;//波特率
m_nCheckout=0;//奇偶效验
m_nStop=0;//停止位
m_sPort="COM1";//端口控制
m_nFlow=0;//流控制
m_nData=8;//数据控制
}CCommDoc::~CCommDoc()
{
if(m_bConnected)
CloseConnection();
if(m_osRead.hEvent)
CloseHandle(m_osRead.hEvent);
}BOOL CCommDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE; // TODO: add reinitialization code here
// (SDI documents will reuse this document)
memset(&m_osRead,0,sizeof(OVERLAPPED));
if((m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL))==NULL)
return FALSE;//初始化事件为无信号状态
return TRUE;
}/////////////////////////////////////////////////////////////////////////////
// CCommDoc serializationvoid CCommDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}/////////////////////////////////////////////////////////////////////////////
// CCommDoc diagnostics#ifdef _DEBUG
void CCommDoc::AssertValid() const
{
CDocument::AssertValid();
}void CCommDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////
// CCommDoc commandsBOOL CCommDoc::OpenConnection()
{
COMMTIMEOUTS TimeOuts;
//POSITION firstViewPos;
//CView *pView;
//firstViewPos=GetFirstViewPosition();
//m_hThread=pView->GetSafeHwnd(); if(m_bConnected)
return FALSE;
m_hCom=CreateFile(m_sPort,GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if(m_hCom=INVALID_HANDLE_VALUE)
return FALSE;
SetupComm(m_hCom,MAXBLOCK,MAXBLOCK);
SetCommMask(m_hCom,EV_RXCHAR);
TimeOuts.ReadIntervalTimeout=MAXBLOCK;
TimeOuts.ReadTotalTimeoutConstant=0;
TimeOuts.ReadTotalTimeoutMultiplier=0;
SetCommTimeouts(m_hCom,&TimeOuts);
if(ConfigConneciton())
{
m_pThread=AfxBeginThread(CommProc,this,THREAD_PRIORITY_NORMAL,
0,CREATE_SUSPENDED,NULL);//挂起线程
if(m_pThread=NULL)
{
CloseHandle(m_hCom);
return FALSE;
}
else
{
m_bConnected=TRUE;
m_pThread->ResumeThread();
}
}
else
{
CloseHandle(m_hCom);
}
return TRUE;
}
void CCommDoc::CloseConnection()
{
if(!m_bConnected)
return;
m_bConnected=FALSE;
SetCommMask(m_hCom,0);//为0全部事件终止
WaitForSingleObject(m_pThread->m_hThread,INFINITE);//等待辅助线程终止
m_pThread=NULL;
CloseHandle(m_hCom);
}DWORD CCommDoc::ReadComm(char *buf, DWORD dwlength)
{
DWORD length=0;
COMSTAT ComStat;
DWORD dwErrorFlags;
ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
length=ComStat.cbInQue;
ReadFile(m_hCom,buf,length,&length,&m_osRead);
return length;
}void CCommDoc::OnFileConnection()
{
// TODO: Add your command handler code here
if(!OpenConnection())
AfxMessageBox("不能连接,请联系技术人员处理");
}void CCommDoc::OnFileClose()
{
// TODO: Add your command handler code here
CloseConnection();
}void CCommDoc::OnUpdateFileClose(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_bConnected);
}void CCommDoc::OnUpdateFileConnection(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(!m_bConnected);
}void CCommDoc::OnFileSettings()
{
// TODO: Add your command handler code here
CSetupDlg dlg;
CString str;
dlg.m_sPort=m_sPort;
str.Format("%d",m_nBaud);
dlg.m_sBaud=str;
str.Format("%d",m_nData);
dlg.m_sData=str;
dlg.m_nStop=m_nStop;
dlg.m_nCheckout=m_nCheckout;
dlg.m_nFlow=m_nFlow;
if(dlg.DoModal()==IDOK)
{
m_sPort=dlg.m_sPort;
m_nBaud=atoi(dlg.m_sBaud);
m_nData=atoi(dlg.m_sData);
m_nStop=dlg.m_nStop;
m_nCheckout=dlg.m_nCheckout;
m_nFlow=dlg.m_nFlow;
if(!m_bConnected)
if(!ConfigConneciton())
AfxMessageBox("不能设置串口");
}
}BOOL CCommDoc::ConfigConneciton()
{
DCB dcb;
if(!GetCommState(m_hCom,&dcb))
return FALSE;
dcb.fBinary=TRUE;
dcb.BaudRate=m_nBaud;
dcb.ByteSize=m_nData;
dcb.fParity=TRUE;
switch(m_nCheckout)
{
case 0: dcb.Parity=NOPARITY;
break;
case 1: dcb.Parity=EVENPARITY;
break;
case 2: dcb.Parity=ODDPARITY;
break;
default:;
}
switch(m_nStop)
{
case 0: dcb.StopBits=ONESTOPBIT;
break;
case 1: dcb.StopBits=ONE5STOPBITS;
break;
case 2: dcb.StopBits=TWOSTOPBITS;
break;
default:;
}
//switch(m_nFlow)
//{
//case 1: dcb.fOutxCtsFlow=TRUE;//为真清除发送暂缓
//流控制没有写代码
return SetCommState(m_hCom,&dcb);
}UINT CommProc(LPVOID pParam)
{
OVERLAPPED os;
int m_nLength;
DWORD dwMask;//,dwTrans;
//COMSTAT comStat;
//DWORD dwErrorFlags;
CCommDoc *pDoc=(CCommdoc *)pParam;
//SetCommMask(m_hCom,EV_RXCHAR);
dwMask=0;
WaitCommEvent(pDoc->m_hCom,&dwMask,&os);
if((dwMask&EV_RXCHAR)==EV_RXCHAR)
{
m_nLength=pDoc->ReadComm(pDoc->buf,100);
if(m_nLength)
{
for(int i=0;i<m_nLength;i++)
//switch(buf[i])
//case ';':*/
pDoc->str+=pDoc->buf[i];
}
}
}
我看主要问题是拼写的问题.
改为:CCommDoc *pDoc=(CCommDoc *)pParam;如何?