Window下优化参数-O2会导致程序崩溃的问题

来源:互联网 发布:英雄无敌3hd for mac 编辑:程序博客网 时间:2024/04/29 22:34

首先,我错了.我冤枉了VC编译器的开发者,-O2优化并没有错,导致程序崩溃的到头来还是我自己的一个粗心的BUG(惭愧啊,犯了这么低级的错误)

从我上一篇文章http://blog.csdn.net/vonger/article/details/7252227 里面,我发现了DEBUG模式一切正常,而Release模式下有-O2却会导致程序崩溃


错在这个定义上:

typedef HRESULT (*enableBlurBehindWindow)(HWNDconst DWM_BLURBEHIND *); 

这个函数的原形是

DWMAPI 
DwmEnableBlurBehindWindow(
    HWND hWnd, 
    __in const DWM_BLURBEHIND* pBlurBehind
    );


而DWMAPI的定义为

EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE

注意了,这里就是问题了,我的定义少了STDAPICALLTYPE,也就是Windows自己常用的CALLTYPE, _stdcall,少了这个导致堆栈错误,程序崩溃

修改定义为

typedef HRESULT (STDAPICALLTYPE* enableBlurBehindWindow)(HWND, const DWM_BLURBEHIND *);
问题解决

原创粉丝点击