LoadImage () winapi всегда возвращает NULL - PullRequest
0 голосов
/ 03 декабря 2018

Я пытался загрузить изображение bmp, используя LoadImage () для его отображения, но я просто не могу найти способ загрузить изображение.Вот некоторый код:

РЕДАКТИРОВАТЬ

, как предлагается, вот работоспособный пример

#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 на основной, но безуспешно.

Я запускаю этот код один раз вначало основного.

Спасибо за вашу помощь, надеюсь, я просто неправильно понял, как это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...