Я использую 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.
Я попытался отладить его, но не смог. Я не могу найти ответ на эту проблему.
Я буду проверять его у себя дома, но ... почему бы вам не использовать Метод testTexture.loadFromFile из SFML? –
Потому что я хочу загрузить его из DLL-файла – Caseofgames
О, хорошо. Ты прав. Я проверил его дома. К сожалению, у меня есть некоторые другие системные ошибки, поэтому я не могу помочь. –