2

重複の可能性:
Visual Studio 2010 でコンパイルされた C++ DLL を Windows 2000 で使用する際の問題

次の質問と同様:
 Visual Studio 2010 の C++ コンパイラを Visual Studio 2008 の C++ ランタイム ライブラリで使用できますか?
 VS2010 は、Windows 2000 で動作するネイティブ実行可能ファイルを作成できますか?


WinXP マシンでVS2010 (CL バージョン 16.00.30319.0 )を使用してコマンド ラインから ( CL.EXE を使用して) コンパイルしている C++ コードがありますが、結果のネイティブ (x86) 実行可能プログラムを Win2000、WinXP で実行したいなど

古いバージョンの CL (VC98、バージョン 12.00.8186 ) は問題なく動作しますが、VS2010 バージョンでは実行可能ファイルが生成され、Win2000 で実行するとポップアップ エラーが発生します。

foo.exeは有効な Win32 アプリケーションではありません

ソリューションは、VisualStudio の設定やプロパティではなく、 CL コンパイラまたはリンカー オプションの形式である必要があります。コードは数年前のもので、他の OS に移植できるように作成されているため、新しい C++ 言語機能は必要ありません。ネイティブ コード (.NET や CLI ではなく x86) の実行可能ファイルのみが必要です。

(例については、 http ://david.tribble.com/src/crlf.cppおよびhttp://david.tribble.com/src/detab.cppを参照してください。)

新しい開発環境 (WinXP、そして最終的には Windows 7) で古いコンパイラ (VS 9.0) を使い続けることができると思いますが、それは理想的なソリューションとは言えません。確かに、MS は、古いがまだ現存する Windows OS と下位互換性のあるネイティブ実行可能ファイルを作成する方法をまだ提供していますか?

4

1 に答える 1

2

「foo.exe は有効な Win32 アプリケーションではありません」というエラーは、editbin を使用して PE ヘッダーの「最小 OS バージョン」フィールドを 0x0500 (Windows 2000) に設定することで修正できます。

EDITBIN /VERSION:5,0 foo.exe

これには、古いバージョンの editbin またはサードパーティのツールが必要です。これは、新しいツールが指定したバージョンを「健全性チェック」するためです。

この後、アプリケーションはロードされますが、kernel32.dll に機能がないというエラーが表示される場合があります。

あなたがリンクしたビリーの質問は、正気のプログラマーが行きたいと思っているよりも、ウサギの穴の奥深くまであなたを連れて行ってくれます。

于 2011-05-22T17:39:52.973 に答える