将位图选入内存DC失败,但没有出错信息

将位图hBmp选入内存DC:
hBmpDef = (HBITMAP)SelectObject(pMemDC->m_hDC, hBmp);
if (hBmp != NULL && hBmpDef == NULL)
ShowLastError(0);

SelectObject返回NULL,表明失败。ShowLastError(0)里调用显示GetLastError的内容,提示“成功操作完成”。

本来就是返回NULL啊
这个函数是返回该类型上一次Select的对象,例如

HBITMAP a,b,c;
...
SelectObject(hdc, a); //返回NULL
SelectObject(hdc, b); //返回a
SelectObject(hdc, c); //返回b

该回答引用ChatGPT
请参考下面的解决方案,如果有帮助,还请点击 “采纳” 感谢支持!

如果 ShowLastError(0) 实际上是显示“成功操作完成”的消息,那么它不应该在这里调用,因为如果 hBmpDef 不是 NULL,它将不会被调用。如果它是一个调试用的函数,那么应该在成功的情况下也调用它,以便于跟踪程序运行情况。

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    HBITMAP hBmp = (HBITMAP)LoadImage(NULL, "test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    HDC pMemDC = CreateCompatibleDC(NULL);
    HBITMAP hBmpDef = (HBITMAP)SelectObject(pMemDC, hBmp);
    if (hBmp != NULL && hBmpDef == NULL)
    {
        DWORD errorCode = GetLastError();
        cout << "Failed to select object. Error code: " << errorCode << endl;
    }
    else
    {
        cout << "Successfully selected object." << endl;
    }

    return 0;
}