Loadbitmap 在 x86 上编译和运行良好,但在编译为 x64 时无法正常工作
Posted
技术标签:
【中文标题】Loadbitmap 在 x86 上编译和运行良好,但在编译为 x64 时无法正常工作【英文标题】:Loadbitmap is compiling and working well as x86, but not working when compiling as x64 【发布时间】:2020-09-21 16:43:11 【问题描述】:我是 C++ 新手。这是我从 WIN32 API 书中改编的代码。 只有在调试中的 x86 模式打开时,它才能按需要工作。当有 x64 时,它正在编译但不工作。 我尝试将 GWL_HINSTANCE 更改为 GWLP_HINSTANCE 没有结果。
hBmpBkgr = LoadBitmapW((HINSTANCE)GetWindowLongW(hWnd, GWLP_HINSTANCE), MAKEINTRESOURCEW(IDB_STONE));
hBkBrush = CreatePatternBrush(hBmpBkgr);
SetClassLongW(hWnd, GCLP_HBRBACKGROUND, (LONG)hBkBrush);
hBmpBall = LoadBitmapW((HINSTANCE)GetWindowLongW(hWnd, GWLP_HINSTANCE), MAKEINTRESOURCEW(IDB_BALL));
GetObjectW(hBmpBall, sizeof(bm), (LPSTR)&bm);
hMemDcFrame = CreateCompatibleDC(hdc);
hBmpFrame = CreateCompatibleBitmap(hdc, rect.right, rect.bottom);
SelectObject(hMemDcFrame, hBmpFrame);
SetGraphicsMode(hMemDcFrame, GM_ADVANCED);
【问题讨论】:
很可能找到了。我需要改变这个:GetWindowLongW(hWnd, GWLP_HINSTANCE) 到这个 GetWindowLongPtr(hWnd, GWLP_HINSTANCE)。任何 cmets 赞赏 原因在官方文档中:docs.microsoft.com/en-us/windows/win32/api/winuser/…如果你开心就回答自己。 【参考方案1】:SetClassLongW:
替换指定的 32 位(长)值 指定的偏移量到额外的类内存或 WNDCLASSEX 指定窗口所属类的结构。
注意:此函数已被 SetClassLongPtr 函数取代。要编写与 32 位和 64 位版本的 Windows 兼容的代码,请使用 SetClassLongPtr。
此外,[LoadBitmap
可用于“要求”部分中指定的操作系统。在后续版本中可能会更改或不可用。而是使用LoadImage 和DrawFrameControl。]
更多详情请参考:LoadBitmap
【讨论】:
嗨,@Kidd,这个答案对你有帮助吗?如果确实解决了问题,请随时accept回答。以上是关于Loadbitmap 在 x86 上编译和运行良好,但在编译为 x64 时无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
尽管在 macBookPro 上编译和运行完美,但在 Mac mini 上编译项目的桥接头问题
C++/LapackE 代码在 Windows 上编译良好,但相同的代码在 Linux 上编译失败