0

My application ( C++, compiled with Mingw, using mainly wxWidgets, Boost and SFML ), which runs smoothly on Windows 7 or Vista, does not work properly on Windows XP SP3. I have a .manifest file which allows the executable to use 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>

If I remove/rename the manifest file, I can launch the executable with Windows XP SP3 ( But with ugly outdated controls ). If I let the manifest file, it run without problems with Vista/7 but with Windows XP SP3, the application is loaded in memory ( I can see it in task manager ) but do nothing. No error message, it does not even crash.

If I recompile it to display a console, the latter does not show anything.

If I use gdb to debug it, the debugger display "Starting program:..." and is then blocked ( Control+C does not work ).

I tried to use Dependency Walker on the executable.
Here is the log with the manifest file: http://pastebin.com/J6T8KBH8
( Here is the log without the manifest: http://pastebin.com/zrYzRaWE / In this case, the application loaded without problems and is still running at the end of the log. )

I've highlighted the line which is displayed in red in Dependency Walker, which refers to a missing procedure in comctl32. Moreover, the log seems to be interrupted without specific errors.

Have you got any idea about why the application seems to be interrupted without even a crash or an message when using a manifest?

Cœur
  • 37,241
  • 25
  • 195
  • 267
4ian
  • 19
  • 6

1 Answers1

0

It turned out that the problem appeared only when using a recent version of the SFML library. Precisely, SFML libraries names have changed from "sfml-xxx.dll" to "sfml-xxx-2.dll" in a recent release.

When linking to the latest version of the libraries, with the new name, the application does not want to start on Windows XP SP3. I've tweaked the CmakeList.txt file used to compile SFML so as to use the old name for the libraries ( sfml-xxxx.dll ) and, when linking to these libraries, the program works perfectly. The only thing that is different is the libraries name. However, in Dependency Walker, I saw that when using the new name ( sfml-xxxx-2.dll ), SFML libraries are presented before wxWidgets and windows related libraries. When I use the old name ( sfml-xxxx.dll ), SFML libraries are presented at the end of the list.

4ian
  • 19
  • 6