我要写做一个反复读取串口的程序,设置定时器SetTimer(NULL,1,2000, (TIMERPROC)myTimerProc);;然后写了定时器的一个回调函数在回调函数里用另一个类的方法读串口(异步)怎么不能通过编译,无法解析声明函数static LRESULT CALLBACK myTimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
定义LRESULT CALLBACK CComm::myTimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
int i=100;
//ss.GetData(Data,&i);
return TRUE; }
写串口的函数
bool CSerialPort::GetData(BYTE *pData, int *length)
{
OVERLAPPED m_osRead;
memset(&m_osRead,0,sizeof(OVERLAPPED));
m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); COMSTAT ComStat;
DWORD dwErrorFlags;
//char str[100];
//memset(str,0,100);
DWORD dwBytesRead=*length;//读取的字节数
BOOL bReadStat; ClearCommError(m_hComm,&dwErrorFlags,&ComStat);
dwBytesRead=min(dwBytesRead, (DWORD)ComStat.cbInQue);
bReadStat=ReadFile(m_hComm,pData,
dwBytesRead,&dwBytesRead,&m_osRead);
if(!bReadStat)
{
if(GetLastError()==ERROR_IO_PENDING)
//GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读操作
{
WaitForSingleObject(m_osRead.hEvent,2000);
//使用WaitForSingleObject函数等待,直到读操作完成或延时已达到2秒钟
//当串口读操作进行完毕后,m_osRead的hEvent事件会变为有信号
}
} PurgeComm(m_hComm, PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
return false;
}
定义LRESULT CALLBACK CComm::myTimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
int i=100;
//ss.GetData(Data,&i);
return TRUE; }
写串口的函数
bool CSerialPort::GetData(BYTE *pData, int *length)
{
OVERLAPPED m_osRead;
memset(&m_osRead,0,sizeof(OVERLAPPED));
m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); COMSTAT ComStat;
DWORD dwErrorFlags;
//char str[100];
//memset(str,0,100);
DWORD dwBytesRead=*length;//读取的字节数
BOOL bReadStat; ClearCommError(m_hComm,&dwErrorFlags,&ComStat);
dwBytesRead=min(dwBytesRead, (DWORD)ComStat.cbInQue);
bReadStat=ReadFile(m_hComm,pData,
dwBytesRead,&dwBytesRead,&m_osRead);
if(!bReadStat)
{
if(GetLastError()==ERROR_IO_PENDING)
//GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读操作
{
WaitForSingleObject(m_osRead.hEvent,2000);
//使用WaitForSingleObject函数等待,直到读操作完成或延时已达到2秒钟
//当串口读操作进行完毕后,m_osRead的hEvent事件会变为有信号
}
} PurgeComm(m_hComm, PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
return false;
}
解决方案 »
- 如何在键盘钩子里判断组合键Ctrl+Shift ?
- 为什么这段代码在DEBUG下可以正常运行,而在RELEASE下一点按钮程序就关闭?
- 不知道什么小区的问题 就在这问吧
- datagrid 问题
- 怎样编一个nt服务程序?
- 如何让视图滚动(CScrollView)
- 结果集是只读的?100分在线等待,谢谢
- 串口通信问题,急求技术帝!!!!
- 怎么在System进程内,访问用户相关的数据,比如访问注册表HKEY_CURRENT_USER
- 高手:where are you? i need your help????
- 一个ADO连接SQLServer2000数据库的问题(困惑好久了,请专家赐教)
- 急!在线等!
VOID CALLBACK TimerProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_TIMER message
UINT_PTR idEvent, // timer identifier
DWORD dwTime // current system time
);
写清楚你的myTimerProc函数是如何定义的,包括头文件和cpp,都在哪个文件中写的,文件是怎么相互包含的。