VC++深入详解(孙鑫)在VS2010学习中碰到的几个调试问题

孙鑫老师的教学视频个人感觉很好,非常实用,讲的非常清晰。以下就将列出我碰到的几个问题以及解决方法~下面是报错信息:

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


2. error C2440: “初始化”: 无法从“char *”转换为“ATL::CStringT

 

3. error C2664: “sendto”: 不能将参数 2 从“CString”转换为“const char * ”

 

 4error C2664: “CWnd::SetDlgItemTextW”: 不能将参数 2 从“const char [1]”转换为“LPCTSTR” 

现在来分析第1个错误:

我在头文件中定义了一个消息响应函数

afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam);

/*消息响应函数原型OnRecvData的申明。因为发送消息是要传递参数,所以要带上括号里面的两个形参。如果不传递参数可以不带*/

同是建立了消息映射 :

ON_MESSAGE(WM_RECVDATA,OnRecvData)

/*消息映射。(消息本身,消息响应函数)。注意是CMy15ChatDlg的消息映射,注意添加的位置*/

我们把响应函数的返回值改成LRESULT就行了。那么,LRESULT是什么呢?是32位整形数,常常用于回调函数。回调函数在windows程序中经常使用,可以有效的避免死锁。函数类型与函数名之间有callback就是回调了,应该是内核调用,如果中间是__cdecl就是普通的函数调用。

分析第二个问题,孙鑫老师定义了一个str变量,如下:

CString str=(char*)lParam;

结果导致报出第2个错误,按照经验应该是ANSI和Unicode之间转换出了问题,按照如下修改即可解决。

LRESULT CMy15ChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam
{
CString str;
str.Format(TEXT("%s"),(char*)lParam);
...............
}

=========================================================================================

顺便说说怎么不通过向导创建函数和消息。

函数的话比较简单,在头文件中定义一个函数,然后再原文件中实现它就可以了。可以参考这篇文章里面的OnRecvData()函数。

消息的话就稍微复杂一点。

/*①定义消息WM_RECVDATA的值*/

#define WM_RECVDATA WM_USER+1

/*②消息响应函数原型OnRecvData的申明。因为发送消息是要传递参数,所以要带上括号里面的两个形参。如果不传递参数可以不带*/
afx_msg LRESULT OnRecvData(WPARAM wParam,LPARAM lParam);

/*③消息映射。在 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP() 添加消息映射,格式为:(消息本身,消息响应函数),括号后面没有任何符号。注意是CMy15ChatDlg的消息映射,不要放到其他的消息映射当中去了,比如CAboutDlg!!*/

BEGIN_MESSAGE_MAP(CMy15ChatDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_RECVDATA,OnRecvData)//在这里添加了
END_MESSAGE_MAP()

/*④消息响应函数的实现*/
LRESULT CMy15ChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam)

  对于第3个错误,只需要修改unicode,点击项目,右键,属性,配置属性,常规,将项目默认值中的字符集设置成“未设置”。若编译后还有未知的错误,则只需将Debug目录中的文件全部清空后再重新生成就可以。

     
   
4个问题,需一点类型转换, SetDlgItemText(IDC_EDIT_Send, (LPCTSTR) "");

你可能感兴趣的:(VC++深入详解(孙鑫视频))