0

私のアプリケーション (C++、Mingw でコンパイル、主に wxWidgets、Boost、および SFML を使用) は、Windows 7 または Vista でスムーズに動作しますが、Windows XP SP3 では正しく動作しません。実行可能ファイルが Windows XP/Vista/7 ルックアンドフィールを使用できるようにする .manifest ファイルがあります。

<?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 XP SP3 で実行可能ファイルを起動できます (ただし、コントロールが古くなっています)。マニフェスト ファイルをそのままにしておくと、Vista/7 では問題なく動作しますが、Windows XP SP3 では、アプリケーションはメモリに読み込まれます (タスク マネージャーで確認できます) が、何もしません。エラー メッセージは表示されず、クラッシュすることさえありません。

コンソールを表示するために再コンパイルすると、コンソールには何も表示されません。

gdb を使用してデバッグすると、デバッガーに「Starting program:...」と表示され、ブロックされます (Control+C は機能しません)。

実行可能ファイルで Dependency Walker を使用しようとしました。
マニフェスト ファイルを含むログは次のとおりです: http://pastebin.com/J6T8KBH8
(マニフェストを含まないログは次のとおりです: http://pastebin.com/zrYzRaWE / この場合、アプリケーションは問題なくロードされ、まだ実行されています。ログの最後に。)

Dependency Walker で赤で表示されている行を強調表示しました。これは、comctl32 で欠落しているプロシージャを参照しています。また、ログは特定のエラーなしで中断されているようです。

マニフェストを使用しているときに、クラッシュやメッセージも表示されずにアプリケーションが中断されるように見える理由について何か考えはありますか?

4

1 に答える 1

0

この問題は、SFMLライブラリの最新バージョンを使用した場合にのみ発生することが判明しました。正確には、最近のリリースでは、SFMLライブラリの名前が「sfml-xxx.dll」から「sfml-xxx-2.dll」に変更されています。

新しい名前の最新バージョンのライブラリにリンクする場合、アプリケーションはWindowsXPSP3で起動することを望んでいません。SFMLのコンパイルに使用されるCmakeList.txtファイルを微調整して、ライブラリの古い名前(sfml-xxxx.dll)を使用しました。これらのライブラリにリンクすると、プログラムは完全に機能します。異なるのはライブラリ名だけです。ただし、Dependency Walkerでは、新しい名前(sfml-xxxx-2.dll)を使用すると、SFMLライブラリがwxWidgetsおよびWindows関連ライブラリの前に表示されることがわかりました。古い名前(sfml-xxxx.dll)を使用すると、SFMLライブラリがリストの最後に表示されます。

于 2010-12-24T13:10:37.587 に答える