Приложение не загружается с XP SP3 и манифестом, связанным с comctl32 - PullRequest
0 голосов
/ 21 декабря 2010

Мое приложение (C ++, скомпилированное с помощью Mingw, использующее в основном wxWidgets, Boost и SFML), которое работает гладко в Windows 7 или Vista, не работает должным образом в Windows XP SP3.У меня есть файл .manifest, который позволяет исполняемому файлу использовать Windows XP / Vista / 7 look'n'feel:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
  xmlns="urn:schemas-microsoft-com:asm.v1"
  manifestVersion="1.0">
<assemblyIdentity
    name="Game Develop Editor.Release - Edittime.App"
    processorArchitecture="x86"
    version="1.0.0.0"
    type="win32"/>
<description>Executable</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

Если я удаляю / переименовываю файл манифеста, я могу запустить исполняемый файл с Windows XPSP3 (но с уродливыми устаревшими элементами управления).Если я позволю файлу манифеста, он будет работать без проблем с Vista / 7, но с Windows XP SP3, приложение загружается в память (я вижу это в диспетчере задач), но ничего не делаю.Нет сообщения об ошибке, он даже не вылетает.

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

Если я использую gdb для отладки, выводится сообщение отладчика "Запуск программы: ... "и затем блокируется (Control + C не работает).

Я попытался использовать Dependency Walker на исполняемом файле.
Вот журнал с файлом манифеста: http://pastebin.com/J6T8KBH8
(Вот журнал без манифеста: http://pastebin.com/zrYzRaWE / В этом случае приложение загрузилось без проблем и все еще работает в конце журнала.)

У меня естьвыделил строку, которая отображается красным цветом в Dependency Walker, что относится к отсутствующей процедуре в comctl32.Более того, кажется, что журнал прерывается без особых ошибок.

Есть ли у вас какие-либо идеи о том, почему приложение прерывается даже без сбоя или сообщения при использовании манифеста?

1 Ответ

0 голосов
/ 24 декабря 2010

Оказалось, что проблема появилась только при использовании последней версии библиотеки SFML.Точно, имена SFML-библиотек были изменены с "sfml-xxx.dll" на "sfml-xxx-2.dll" в последнем выпуске.

При ссылке на последнюю версию библиотек с новым именем, приложение не хочет запускаться в Windows XP SP3.Я подправил файл CmakeList.txt, используемый для компиляции SFML, чтобы использовать старое имя для библиотек (sfml-xxxx.dll), и при связывании с этими библиотеками программа работает отлично.Единственное, что отличается от - это имя библиотеки.Однако в Dependency Walker я увидел, что при использовании нового имени (sfml-xxxx-2.dll) библиотеки SFML представляются перед wxWidgets и библиотеками, связанными с окнами.Когда я использую старое имя (sfml-xxxx.dll), библиотеки SFML представляются в конце списка.

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