2017-02-05 29 views
1

Я использую SFML 2.4 и сообщество Visual Studio 2015. У меня возникли проблемы с загрузкой изображения с ресурса, и я ничего не могу найти. Вот мой код:Неспособность загрузить ресурс в SFML 2.4

#include <SFML\Graphics.hpp> 
#include <SFML\System.hpp> 
#include <Windows.h> 

sf::Sprite m_Test; 

sf::Image LoadImageFromResource(LPCWSTR name) 
{ 
    HRSRC rsrcData = FindResource(NULL, name, RT_RCDATA); 
    if (!rsrcData) 
     throw std::runtime_error("Failed to find resource."); 

    DWORD rsrcDataSize = SizeofResource(NULL, rsrcData); 
    if (rsrcDataSize <= 0) { 
     MessageBox(NULL, L"Size of resource is 0.", L"ERROR", MB_OK); 
     throw std::runtime_error("Size of resource is 0."); 
    } 

    HGLOBAL grsrcData = LoadResource(NULL, rsrcData); 
    if (!grsrcData) 
     throw std::runtime_error("Failed to load resource."); 

    LPVOID firstByte = LockResource(grsrcData); 
    if (!firstByte) 
     throw std::runtime_error("Failed to lock resource."); 

    sf::Image image; 
    if (!image.loadFromMemory(firstByte, rsrcDataSize)) 
     throw std::runtime_error("Failed to load image from memory."); 

    return image; 
} 

void init() { 
    sf::Image testImage = LoadImageFromResource(L"test"); 
    sf::Texture testTexture; 
    if (!testTexture.loadFromImage(testImage)) { 
     throw std::runtime_error("Failed to load image."); 
    } 

    sf::Sprite test; 
    test.setTexture(testTexture); 
    m_Test = test; 
} 

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { 
    sf::RenderWindow window(sf::VideoMode(1280, 720), "The Principle of Battle"); 

    init(); 

    while (window.isOpen()) { 
     sf::Event event; 
     while (window.pollEvent(event)) { 
      if (event.type == sf::Event::Closed) { 
       window.close(); 
      } 
     } 

     window.clear(sf::Color::Black); 

     window.draw(m_Test); 

     window.display(); 
    } 
} 

Когда я запускаю этот код, выход говорит следующее:

Исключение брошено в 0x00007FFF47BE7788 в принципе Battle.exe: Microsoft C++ исключение: станд :: runtime_error в памяти местоположение 0x0000009C0C96EE18.

Я попытался отладить его, но не смог. Я не могу найти ответ на эту проблему.

+0

Я буду проверять его у себя дома, но ... почему бы вам не использовать Метод testTexture.loadFromFile из SFML? –

+0

Потому что я хочу загрузить его из DLL-файла – Caseofgames

+0

О, хорошо. Ты прав. Я проверил его дома. К сожалению, у меня есть некоторые другие системные ошибки, поэтому я не могу помочь. –

ответ

0

Вы должны изучить обработку исключений, если вы собираетесь использовать исключения. Ошибка говорит, что было исключено исключение, поэтому вам нужно выяснить, что такое исключение, чтобы вы знали, что исправить.

http://en.cppreference.com/w/cpp/language/try_catch http://www.cplusplus.com/doc/tutorial/exceptions/

+0

Вот проблема, размер ресурса 0. – Caseofgames

0

я должен был изменить эту линию от:

HRSRC rsrcData = FindResource(NULL, name, RT_RCDATA); 

к:

HRSRC rsrcData = FindResource(NULL, MAKEINTRESOURCE(name), RT_RCDATA); 
+0

Но теперь я получаю белое изображение. – Caseofgames