error C2440: ’static

    技术2025-06-07  19

    转帖:http://blog.csdn.net/stilling2006/archive/2010/06/18/5676794.aspx

     

     

    error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”1>        从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast

    搜索发现为开发平台迁移问题。由vc6.0升级至vs2005以上平台均会遇到这情况,原因为

    VS2005对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2005下编译不通过

    // 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnRecvData(WPARAM wParam, LPARAM lParam); DECLARE_MESSAGE_MAP()

    BEGIN_MESSAGE_MAP(CChatDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPON_EN_CHANGE(IDC_EDIT_RECV, &CChatDlg::OnEnChangeEditRecv)ON_BN_CLICKED(IDC_BTN_SEND, &CChatDlg::OnBnClickedBtnSend)ON_MESSAGE(WM_RECVDATA, &CChatDlg::OnRecvData ) END_MESSAGE_MAP()

    编译错误提示:

    error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”1>        从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast

    更改定义:afx_msg void OnRecvData(WPARAM wParam, LPARAM lParam);为afx_msg LRESULT OnRecvData(WPARAM wParam, LPARAM lParam);

    编译通过

    LRESULT是一个数据类型,MSDN: 32-bit value returned from a window procedure or callback function指的是从窗口程序或者回调函数返回的32位值

     

    补充:在实现函数的时候,程序最后返回0就可以了。

    ...

    afx_msg LRESULT OnRecvData(WPARAM wParam, LPARAM lParam)

    {

           ...

           return 0;

    }

    最新回复(0)