在EVC4.0下编译通过且能正常运行,将该程序用VS2008转换后,编译出错,提示如下:
1>.\JYXTDlg.cpp(64) : error C2440: “static_cast”: 无法从“void (__cdecl CJYXTDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__cdecl CWnd::* )(WPARAM,LPARAM)”
1> 在匹配目标类型的范围内没有具有该名称的函数
程序中,头文件添加代码如下:
#include "PSerialPort.h"
public:
CPSerialPort* m_pSerial;//CPSerialPort类对象
static void OnDataArrive(unsigned char *data,int length,DWORD userdata);
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CJYXTDlg)
……
afx_msg void OnDataArrivedMsg(WPARAM wParam,LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()cpp文件中相关代码如下:
BEGIN_MESSAGE_MAP(CJYXTDlg, CDialog)
//{{AFX_MSG_MAP(CJYXTDlg)
……
ON_MESSAGE(WM_NEW_DATA_ARRIVE,OnDataArrivedMsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()void CJYXTDlg::OnDataArrive(unsigned char *data,int length,DWORD userdata)
{
CJYXTDlg *pWnd=(CJYXTDlg *)userdata;
::SendMessage(pWnd->m_hWnd,WM_NEW_DATA_ARRIVE,(WPARAM)data,LPARAM(length));
}void CJYXTDlg::OnDataArrivedMsg(WPARAM wParam,LPARAM lParam)
{
//处理收到的数据
int bufLen=(int)lParam;
unsigned char *buf=(unsigned char *)wParam;
for(int i=0;i<bufLen;i++)
{
……
}
}
请各位指点迷津。