winapi的LoadImage()始终返回NULL

时间:2018-12-03 11:03:23

标签: c++ winapi visual-c++

我试图使用LoadImage()加载bmp图像以显示它,但是我只是找不到一种加载图像的方法。这是一些代码:

编辑

根据建议,这是一个可运行的示例

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

std::string GetLastErrorAsString()
{
    //Get the error message, if any.
    DWORD errorMessageID = ::GetLastError();
    if (errorMessageID == 0)
        return std::string(); //No error message has been recorded

    LPSTR messageBuffer = nullptr;
    size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);

    std::string message(messageBuffer, size);

    //Free the buffer.
    LocalFree(messageBuffer);

    return message;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int iShow) {

    std::ofstream file("output.txt");

    HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, L"C:\\yes.bmp", IMAGE_BITMAP, 300, 300, LR_LOADFROMFILE);

    if (hBitmap == NULL) {
        file << "error: " << GetLastErrorAsString().c_str() << std::endl;
        return 1;
    }
    else {
        file << "success." << std::endl;
    }
    return 0;
}

并且此结果始终为NULL。如果我输入了错误的文件名,则错误消息将为The system cannot find the file specified.,但是如果文件名正确,则根本没有错误消息。

我尝试将bmp文件保存为24位和32位,我使用了LR_标志,它没有任何改变。

我还尝试将HINSTANCE设置为主要的,但没有成功。

我在主程序的开头一次运行了这段代码。

感谢您的帮助,我希望我只是误解了它的工作原理

0 个答案:

没有答案