8

Windows 98SE を実行しているレガシー システム用にアプリケーションをビルドする必要があります。(このシステムには特殊なハードウェアが含まれており、OS のアップグレードは不可能です。) 私の開発環境は Visual C++ です。アプリケーションは普通の ANSI C で、結果は WIN32 コンソール アプリケーションです。

Visual Studio 2008 では、古いバージョンの Windows のサポートが完全に廃止されたことを認識しているため、代わりに Visual Studio 2005 を使用しています (これは、最終世代の Windows XP ラップトップにまだあります)。W98SE で使用できない API 関数を呼び出さないように条件付きコンパイルを行っており、Unicode を使用していないことも知っています。

nbこれはすべて機能していました。過去に W98SE 実行可能ファイルのビルドに成功しました。何とかして。

私が構築したアプリケーションは、「新しいバージョンの Windows が必要です。Windows のバージョンをアップグレードしてください」で失敗します。

.exe ファイルを 16 進エディタで調べたところ、WINVER 値 (この場合は 10 進数のオフセット 288) は 4 です。通常のビルド、つまり最新の Windows バージョンでは、WINVER 値 (この場合はオフセット 296 10 進数) は 5 です。では、WINVER=4 バージョンで「新しいバージョンが必要です」というエラーが発生する可能性はありますか?報告される?

4

1 に答える 1

2

より新しいランタイム ライブラリ MSVCRT.DLL とリンクしている可能性があります。以下を試してください:

dumpbin /dependents myfile.exe

MSVCRTnn.DLL が表示されている場合は、問題があります。MSVCRT.DLL (数字なし) が表示された場合は問題ありませんが、注意が必要です。

おそらく最も簡単な解決策は、ランタイム ライブラリを静的にリンクすることです。プロジェクトのプロパティで、C/C++、コード生成の下で、ランタイム ライブラリを /MT または /MTd に設定します。/MD または /MDd またはデフォルトを使用すると、ランタイムに動的にリンクされ、問題が発生する可能性があります。

これを変更すると、"dumpbin /dependents myfile.exe" は MSVCRT.DLL への依存関係を一覧表示しなくなり、動作するはずです。

于 2012-10-17T07:37:19.150 に答える