Что может вызвать проблемы совместимости приложений между архитектурами x64 и x86? - PullRequest
0 голосов
/ 17 мая 2019

Я работаю над приложением VC ++, и моя работа состоит в том, чтобы исправить некоторые ошибки в нем, код был в основном написан студентом в прошлом году.Это графическое приложение, использующее как SFML, так и TGUI.

Оно предназначено для 32-битных архитектур , но на самом деле его хорошо работает только на компьютерах x64 .

На x64 абсолютно все работает отлично, но в 32-битных системах текст, отображаемый с использованием sf: Text и sf: Font, просто печатает черные блоки после первого вызова функции, которая устанавливает строку sf: Text.

Я знаю, что код, ориентированный на 32-битные системы, должен нормально работать на x64, и поэтому я потерян.Я проверил, на какую архитектуру системы я нацеливаюсь.

Я использую совместимые 32-битные, последние обновленные библиотеки SFML и TGUi.Я проверил миллиард раз, правильно ли я нашел пути к DLL, include и lib.Свойство linker> start содержит все .lib, на которые полагаются как sfml, так и tgui.

Я знаю, что шрифт загружен, но я знаю, что он не остается установленным в тексте, даже если переменная, содержащая шрифт, не уничтожена, и что я установил шрифт для текста ранее.

Вот как шрифт загружается и связывается с текстом:

MainWindow.cpp:

Font& MainWindow::m_fontDisplayer = m_data.getFont_1();


//init displayer
m_data.getDisplayer().setFont(m_fontDisplayer);
m_data.setDisplayer("");
m_data.getDisplayer().setCharacterSize(54);
m_data.getDisplayer().setFillColor(Color(0, 0, 0, 255));

DataManager (m_data):

Font DataManager::m_font_1 = Font();
if (!m_font_1.loadFromFile("Ressources/font_1.ttf"))
{
    printf("\nCould not find font_1.ttf font.");
}

void DataManager::setDisplayer(std::string s) {
if (m_displayer.getFont() == NULL) {
    //m_displayer.setFont(m_font_1);
}
m_displayer.setString(s);
m_displayer.setPosition(sf::Vector2f(320 - m_displayer.getGlobalBounds().width,82));}

Эта функция заставила меня сказать, что шрифт не установлен в текст через некоторое время. (M_displayer - это sf :: Text), потому что я установил точку остановки в строке комментария и что к ней обращаются дажеесли установка шрифта это первое, что я делаю.На самом деле, это выражение «если» предназначалось только для проверки точки остановки. Это не решает проблему (приводит к падению моего приложения на 32-битной системе), и это было бы слишком долго, потому что операции sf: Font действительно тяжелые.

Что может вызвать проблему совместимости между двумя архитектурами? В дополнение к тому, что я сказал, я уверен, что единственное различие между системами, на которых я тестирую, - это архитектура, а не версия Windows.Я пробовал на нескольких компьютерах, и снова, проблема возникает только на 32-битных компьютерах.

Спасибо всем, кто мог объяснить и помочь мне понять проблему.

РЕДАКТИРОВАТЬ : Я очистил текст о проблемах Tgui, когда решил их.

...