Stack around the variable 'info' was corrupted.

codebm codebm 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
新建个WIN32项目(非空),把这段代码覆盖原有的WndProc函数

在DEBUG就会Stack around the variable 'info' was corrupted.

求解



LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
//static BITMAPINFO info;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:

{
//
//HDC hdcScreen = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
HDC hdcScreen = GetDC(NULL);

HDC hdc = GetDC(hWnd);
//一个memory dc和一个bitmap(ddb)
HDC hCompatibleDC = CreateCompatibleDC(hdcScreen);
HBITMAP hBitMap = CreateCompatibleBitmap(hdcScreen, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES));
::SelectObject(hCompatibleDC, hBitMap);

//拷贝surface的数据到bitmap里
::BitBlt(hCompatibleDC, 0, 0, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES), hdcScreen, 0, 0, SRCCOPY);



//ddb->dib
BITMAPINFO info;
::memset(&info, 0, sizeof(info));
info.bmiHeader.biBitCount = 4;
info.bmiHeader.biSize = sizeof(info.bmiHeader);
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biCompression = BI_RGB;

info.bmiHeader.biWidth = GetDeviceCaps(hdcScreen, HORZRES);
info.bmiHeader.biHeight = GetDeviceCaps(hdcScreen, VERTRES);
char *buff = new char[GetDeviceCaps(hdcScreen, HORZRES) * GetDeviceCaps(hdcScreen, VERTRES) * 3];
if(!GetDIBits(hCompatibleDC, hBitMap, 0, GetDeviceCaps(hdcScreen, VERTRES), buff, &info, DIB_PAL_COLORS))
::MessageBox(hWnd, NULL, NULL, MB_OK);;

//dib->surface

SetDIBitsToDevice(hdc, 0, 0, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES), 0, 0, 0, GetDeviceCaps(hdcScreen, VERTRES), buff, &info, DIB_PAL_COLORS);
/* */
//释放
delete []buff;
buff = 0;
::DeleteDC(hCompatibleDC);
::DeleteObject(hBitMap);
ReleaseDC(hWnd, hdc);
ReleaseDC(NULL, hdcScreen);

//DeleteDC(hdcScreen);
}//DestroyWindow(hWnd);


break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

...全文

相关推荐

Android studio 出现错误Run with --stacktrace option to get the stack trace. Run with --info or --debu

主要介绍了 Android studio 出现错误Run with --stacktrace option to get the stack trace. Run with --info or --debu的相关资料,需要的朋友可以参考下

weixin_38553275

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构02

① Firecracker 为每个 microVM 提供极简设备模型:virtio-net, virtio-blk, serial console。:① BB84:Alice 随机选择基矢(+ 或 ×)发送单光子,Bob 随机测量基矢,比对后保留一致位的子集作为原始密钥。:密度 1 EB/mm³;:① Parquet 文件:行组(Row Group)→ 列块(Column Chunk)→ 页(Page)。

flyair_China

Android studio 出现错误Run with –stacktrace option to get the stack trace. Run with –info or –debu

Android studio Run with –stacktrace option to get the stack trace. Run with –info or –debu 提示信息 Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 其实是让你去查看更多的log信息。找到你项目的根目录,比如你的项目是MyApplication,在dos命令下进入该目录执行 gradlew compileDebug --stac

weixin_38519234

thread_info 与内核栈 stack 关系.pdf

thread_info 结构被称为迷你进程描述符,是因为在这个结构中并没有 直接包含与进程相关的字段,而是通过 task 字段指向具体某个进程描 述符。通常这块内存区域的大小是 8KB,也就是两个页的大小(有时候 也使用一个页来存储,即 4KB)。一个进程的内核栈和 thread_info 结构之间的逻辑关系如下图所示:

hkd_ywg

stack-setup-info-gen:使用setup-info生成stack.yaml

该项目提供了一个可执行文件,给定了ghc版本字符串,该可执行文件可以生成stack.yaml,使您可以使用stack安装该版本的GHC。 从项目根目录开始的用法示例: stack run ghc-8.6.1-beta1 如果存储库中不存在输入文件,则可以使用--fetch-inputs标志。 stack run -- ghc-8.6.5 --fetch-inputs 如果脚本不知道如何“发现ghc版本”,请以正确的方式实施discoverDateVer ,或手动添加翻译。 对于某些ghc版本,此脚本的输出包含在此回购中的output /文件夹下。 该项目仍处于试验阶段。 长时间保持一致时要谨慎。

小旗旗
评论 4
收藏 已收藏
分享
返回顶部
codebm
图形处理/算法 19,463 成员 50,678 内容