Visual C++ 2008 で Win98/Me/NT4 対応バイナリを作りたい
と思い調査してみました。
調査してみると COFF ヘッダ内の『MajorSubsystemVersion』のフィールドが 4 から 5 になっていることに気がつきました。確認のために、Visual C++ 2005 でビルドした実行ファイルの当該フィールドを 4 から 7 に変更すると Vista でも実行できなくなりました。ふむふむ。ココが肝みたいですよ。
早速、Visual C++ 2008 でビルドしたあとに実行ファイルの『MajorSubsystemVersion』を 5 から 4 にバイナリエディタで変更し Windows Me で実行してみると・・・
kernel32.dll で GetFileSizeEx がみつかりません orz
GetFileSizeEx は Windows 2000 以降の対応なので、本格的にダメみたいです。MFC を使わない場合は、インポートしている API 的には問題なさそうに見えるのですが・・・動作せず?
当面は、Visual C++ 2005 と Visual C# 2008 の生活を送りたいと思います。
参考:
- /SUBSYSTEM (サブシステムの指定) (MSDN)
- EXEファイルの内部構造(PEヘッダ) (CodeZine)
最近のコメント