关于串口的问题~~傻了....

zzxxdd 2009-03-06 02:39:15
原来用VC6.0写的串口程序运行正常 ,后来该用VS.net环境下运行,在编译的时候出现了下面这个错误,不知道为什么~~求救~~~
error C2440: “static_cast” : 无法从“void (__thiscall CResultListDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)” 在匹配目标类型的范围内没有具有该名称的函数


具体代码如下:
//自定义消息
const CM_RECEIVE = WM_USER+100;

//添加消息映射宏
ON_MESSAGE(CM_RECEIVE,OnRecieveData)

//线程函数
DWORD ThreadFunction(LPVOID pParam)
{
DWORD dwEvtMask=0,
dwResult=0;
// SetCommMask(hCom,EV_RXCHAR|EV_TXEMPTY); //有哪些串口事件需要监视
tOverLaped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
while (IsFun)
{
WaitCommEvent(((CChuankouDlg*)AfxGetMainWnd())->hCom,&dwEvtMask,&tOverLaped);
dwResult = WaitForSingleObject(tOverLaped.hEvent,1000);

switch(dwResult)
{
case WAIT_OBJECT_0:
switch(dwEvtMask)
{
case EV_RXCHAR:
{
if(IsStop)
{
IsStop = FALSE;
//发送消息,由消息函数接收数据
::PostMessage(AfxGetMainWnd()->m_hWnd, CM_RECEIVE,0,(LPARAM)EV_RXCHAR);
}
break;
}
}
break;
}
}
return 0;
}

//自定义的消息处理函数,用于接收数据
void CChuankouDlg::OnRecieveData(WPARAM wParam,LPARAM lParam)
{
DWORD res,factbyte;
memset(DataBuffer,0,1024);
COMSTAT rst; //str返回串口状态信息

ClearCommError(hCom,&res,&rst);
rOverLaped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
//读取数据到缓冲区中
if (ReadFile(hCom,DataBuffer,rst.cbInQue,&factbyte,&rOverLaped))
{
DataBuffer[rst.cbInQue] = 0;
IsStop = FALSE;
}
else
{
res = WaitForSingleObject(rOverLaped.hEvent,5000);
}
IsStop = FALSE;
}


错误:error C2440: “static_cast” : 无法从“void (__thiscall CResultListDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)” 在匹配目标类型的范围内没有具有该名称的函数

...全文
129 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
levelmouse 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jennyvenus 的回复:]
afx_msg LRESULT OnRecieveData( WPARAM .......... );

函数体里面return 一个TRUE即可。
[/Quote]
up
会思考的草 2009-03-06
  • 打赏
  • 举报
回复
VS.NET中很多消息处理函数原型变了。
把void CChuankouDlg::OnRecieveData(WPARAM wParam,LPARAM lParam)
的返回值改成LRESULT即可。
cnzdgs 2009-03-06
  • 打赏
  • 举报
回复
把消息映射函数的返回值类型改成LRESULT。
zzxxdd 2009-03-06
  • 打赏
  • 举报
回复
UP
uP
UP
UP
uP
UP
UP
uP
UP
UP
uP
UP
用户 昵称 2009-03-06
  • 打赏
  • 举报
回复
afx_msg LRESULT OnRecieveData( WPARAM .......... );

函数体里面return 一个TRUE即可。
用户 昵称 2009-03-06
  • 打赏
  • 举报
回复
将函数从void 改成 LRESULT就ok了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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