更多精彩内容,请见:http://www.16boke.com
by zxy,Java/C++编程交流群:168424095
项目属性->配置属性->链接器->调试->生成映射文件选择:是(/MAP)
在主文件中加入#include “resource.h”
因为旧版本的ON_WM_NCHITTEST宏使用了UINT (_thiscall CWzButton::*)(CPoint);类型的类成员函数指针,其定义如下:
#define ON_WM_NCHITTEST()\
{
WM_NCHITTEST,0,0,0,AfxSig_wp,\
(AFX_PMSG)(AFX_PMSGW)(UINT(AFX_MSG_CALL CWnd::*)(CPoint)&OnNcHitTest},
#defineON_WM_NCHITTEST()\
{WM_NCHITTEST, 0, 0, 0,AfxSig_wp, \
(AFX_PMSG)(AFX_PMSGW)(UINT(AFX_MSG_CALLCWnd::*)(CPoint)&OnNcHitTest) },
新版本的是:
#defineON_WM_NCHITTEST()\
{WM_NCHITTEST, 0, 0, 0,AfxSig_l_p, \
(AFX_PMSG)(AFX_PMSGW)\
(static_cast<LRESULT (AFX_MSG_CALLCWnd::*)(CPoint)> (&ThisClass :: OnNcHitTest)) },
返回值类型由UINT改成了LRESULT,再加上static_cast的严格检查,所以出错。
解决方法:将OnNcHitTest函数由:
afx_msg UINT OnNcHitTest(CPoint point);
改成:
afx_msg LRESULT OnNcHitTest(CPoint point);
原因:MFC和标准库混用
解决方法:方法一:把所有文件里面#definenew DEBUG_NEW全部删除
方法二:保证使用了new的语句在宏#define newDEBUG_NEW的前面。
遇到问题情况:
试试把#include<afx.h>挪到最靠前位置;
#import"c:\ProgramFiles\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF","EndOfFile")
#include<afx.h>
解决方法:
把#include<afx.h>挪前不行的话,就看看项目属性里有没有定义_WINDOWS_这个宏,有的话就去掉。
更多精彩内容,请见:http://www.16boke.com