调试日志-不匹配的消息映射宏和相应函数的错误。

程序在Debug的时候正常,但是在Release时无效地址访问,当时的栈Trace如下:

ChildEBP RetAddr 
0012f7d8 7288bab2 MFC42u!CMapPtrToPtr::GetValueAt+0x3
0012f7e4 72831215 MFC42u!COleControlContainer::AttachControlSite+0x12
0012f7f0 72831112 MFC42u!CWnd::AttachControlSite+0x35
0012f800 72831ea2 MFC42u!CWnd::FromHandle+0x22
0012f884 72831c8a MFC42u!CWnd::OnWndMsg+0x1f1
0012f8a4 72831bf4 MFC42u!CWnd::WindowProc+0x24

每次前面有所不同,一般从FromHandle后面就查不多了,因为是Release失败,考虑可能是函数签名不匹配导致的返回栈不正确等,或者内存越界等,打开ApplicationVerifier也找不出问题,虽然设定了调试信息,但是MFC42U不携带源码信息,只有函数。不过想想,世界上倒霉蛋不会只我一个,遂上网搜索。google之,众多MVP都说是自定义消息的相应函数签名不正确,应该为

LRESULT (WPARAM, LPARAM)

因为ON_MESSAGE()宏产生的函数签名为此格式,但是如果少写了参数,就会有此表现。在程序中搜索ON_MESSAGE,果然发现有一个别人写的自定义消息相应函数无参数。改之,一切正常。

仔细研究了一下调用时的情况,如果判断一下最后消息应该是可以快速发现问题的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值