非常非常奇怪的问题!BitBlt莫名其妙出错

北仙 2016-03-26 09:05:39
这是部分代码
DWORD ERROR1;
if(
!BitBlt(menuVRAMdc,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
NormalDC,rect.left,rect.top,SRCCOPY)
)
{
ERROR1=GetLastError();
printf("%d",ERROR1);
}
这种情况下,优化加到-O3,正常通过,不出错,BilBlt返回为true
但是如果,代码改为
DWORD ERROR1;
if(
!BitBlt(menuVRAMdc,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
NormalDC,rect.left,rect.top,SRCCOPY)
);
ERROR1=GetLastError();
printf("%d",ERROR1);
优化为-O3 BitBlt返回居然变为了false ,其它地方没有丝毫改动,GetLastError居然是183
感觉183是别处的错误,BitBlt的错误根本没有被得到

调了好几天了,一直不能解决
...全文
503 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2016-03-27
  • 打赏
  • 举报
回复
DWORD ERROR1=0; 试试
worldy 2016-03-27
  • 打赏
  • 举报
回复
DWORD ERROR1;//定义时,是一个随机值 if( !BitBlt(menuVRAMdc,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top, NormalDC,rect.left,rect.top,SRCCOPY) );//;的存在使得if啥都不管了 ERROR1=GetLastError();// 不被if管控,不管if是否成功都将执行 printf("%d",ERROR1); 结论,楼主好好的复习一下C语法
lang14 2016-03-27
  • 打赏
  • 举报
回复
看看dc是否为空
paschen 2016-03-27
  • 打赏
  • 举报
回复
If the function fails, the return value is zero. To get extended error information, call GetLastError. https://msdn.microsoft.com/en-us/library/windows/desktop/dd183370%28v=vs.85%29.aspx

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧