消息映射函数接口错误,导致release版崩溃!

 

响应通过PostThreadMessage函数发出的自定义消息的MESSAGE_HANDLE是:

ON_THREAD_MESSAGE

 

比如,有自定义消息:

#define WM_SET_NCREADY  (WM_USER + 0x451)

通过下面函数发送消息:

PostThreadMessage(WM_SET_NCREADY, 0, 0);

MESSAGE_HANDLE是:

ON_THREAD_MESSAGE(WM_SET_NCREADY, OnSetNcReady)

处理函数的参数接口应该是:

  afx_msg void OnMyThreadMsg(WPARAM, LPARAM)

 

可是我错误地写作:

  afx_msg void OnMyThreadMsg()

这导致了在release版本,程序崩溃。

 

注意:  1 在编译时候,没有报告错误,或者警告。

2 该错误非常难调试,因为突然程序就崩溃了,而且是调试版本,更可恨的是callstack也崩溃了,无法追踪错误的来源。

3 这也说明了函数原形的重要性、类型强制转换的危险性。

 

怎样调试仅在release版本出现的问题:

        1 project setting中,C/C++优化设为:disable(debug)Debug info设为:Program Database for Edit and Continue

        2 project setting中,Link设为:[enable]Generate debug info

        3 把最近的正确版本调出来,进行比较,从而试着发现问题。

 

在问题解决后,发现了下面文章,详细描述了该问题,请参考:

PRB: Incorrect Function Signatures May Cause Problems in Release

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值