做VC 项目时,工程配置为多字节,为了显示XP风格控件,在stdafx.h中加入如下代码:
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
以前这样配置都可以正常显示,这次在debug模式下运行报错,显示异常,以下是具体信息:
HEAP[XXXX.exe]: Heap block at 003FE0D8 modified at 003FE11A past requested size of 3a
XXXX..exe 已触发了一个断点。
HEAP[XXXX..exe]: Invalid address specified to RtlValidateHeap( 003D0000, 003FE0E0 )
XXXX..exe 已触发了一个断点。
定位很久才发现,如果使用MFCButton且窗口控件使用XP风格,才会报错。
我把MFCButton控件全部改成Button控件后,使用XP风格,运行后,此异常消失。
或者使用MFCButton控件,不使用XP风格,也不会报这个异常。
由于时间问题,没有对这个问题深入研究,若有高手知道的话,还望指教!!!