Windows 98でVisual Studio 2005でコンパイルされたアプリケーションを実行できますか?

StackOverflow https://stackoverflow.com/questions/6831756

質問

Microsoft Visual Studio 2005でプログラムを作成しましたが、うまく機能しています。

私が抱えている問題は、使用する必要があるマシンはWindows 98を実行することです。VC++の再配布可能をインストールする必要があると言える限りです。 Windows 98に再配布可能をインストールできますか、それともWindows 98で動作させる方法はありますか?

役に立ちましたか?

解決

はい、VS 2005でコンパイルされたアプリは、Windows 98と私で完全に正常に機能します。私はそれらのいくつかを自分で実行しており、この目的のために2005年と2005年を維持し、インストールしています。 CRTの再配布可能なバージョン2005 Windows 98までさかのぼります。

トリックはそれです マルチバイト文字セット(MBCS)のアプリケーションをコンパイルする必要があります. 。デフォルトのプロジェクト設定であるUnicodeとしてコンパイルされた場合、機能しません。 Windows 9Xプラットフォームは、追加のヘルプがなければUnicodeをサポートしていません。プロジェクトの設定を変更して問題なくなるはずですが、Unicodeを想定するためにコードを作成した場合は、問題が発生します。

これが、で定義されている一般的な文字タイプと関数を使用する必要がある理由です tchar.h, 、Unicodeビルドに好まれる幅広いキャラクターの同等物ではなく。常に文字列を定義します TCHAR タイプ(または LPTSTR また LPCTSTR タイプ)、条件付きで定義されています wchar_t また char, 、 適切に。始まる文字列操作関数を使用します _tcs..., 、幅の広いまたは狭い文字に固有のものではなく。関数を呼び出すときは、常に汎用バージョンまたは広範囲に特化したバージョンではなく、一般的なtypedef'edバージョンを呼び出すことを確認してください。 A またはa W サフィックス。

最初からそれを行っていない場合、戻ってこれを修正するのは大変な作業かもしれません。その場合、あなたは Windows95/98/MEシステム上のUnicodeのMicrosoftレイヤー, 、ネイティブにサポートされていないレガシーWindows 9xオペレーティングシステムでUnicode関数を呼び出すことができる抽象化レイヤーを提供します。

Unicode/MBCSを超えて、注意すべき唯一のことは、Wins32 APIに存在しなかった機能をWindows 98日に戻っていない機能を呼び出していないことです。 MicrosoftがWindows 98をサポートしていないため、オンラインMSDNドキュメントが「最小限のサポートされているクライアントバージョン」についてももう教えてくれることを信頼することはできません。 全て SDKドキュメントの「最小限のサポートバージョンは現在Windows 2000であり、それが正しくないことを知っています。 API全体は、W2Kほど遅く導入されていません。正確な情報を取得するには、SDKドキュメントの古いバージョンを取得する必要があります。 VS 2005のインストールに付随するものは問題ありません。そこにある情報は、少なくとも95ではないにしても、Win 98に関してはさかのぼります(正確には覚えていません)。

Windows 98に存在しなかった関数を呼び出したい場合は、新しいシステムで実行されているときに実行しているときに それは 利用可能、あなたはそれらに電話するために特別な注意を払う必要があります 動的に, 、アプリケーションのDLLインポートテーブルにそれらを追加するのではなく(リンカーが一般的に自動的に行うこと)。それは自分で関数ポインターを定義し、 LoadLibraryGetProcAddress それらを呼び出す機能。楽しいことではありませんが、 します 仕事。

または、リンカーを構成してライブラリを「遅延」します(プロジェクトのプロパティを確認してください)。これははるかに便利ですが、明らかにあなたはあなたを確実にする必要があります それだけ ターゲットオペレーティングシステムで利用可能な機能を呼び出します。そうしないと、アプリケーションがクラッシュします。

いずれにせよ、 GetVersionEx 関数 環境に応じて、コードが異なるパス(利用可能な場合は新しい機能を呼び出すか、古い関数に戻る)を実行できるように、現在のホストオペレーティングシステムについて知っておく必要があることをすべて伝えます。これにより、新しいシステムで新しい機能をサポートできますが、レガシーオペレーティングシステムのサポートを維持することが適切です。あなたはたくさん見つけるでしょう if これが正しく行われたときのコードベースのステートメント。 :-)

他のヒント

はい、できます http://www.microsoft.com/download/en/details.aspx?id=3387 (Microsoft VisualC ++ 2005再配布可能パッケージ(x86))

サポートされているオペレーティングシステム:Windows2000 Service Pack 3、 Windows98, 、Windows 98 Second Edition、WindowsMe、Windows Server 2003、Windows XP Service Pack 2

システムの要件を確認しましたか?によると このリンク, 、Windows 98は大丈夫なはずです。

アプリケーションにCRTを配布する以上のものがあります。プログラムで使用するすべての機能は、Windows98で利用できる必要があります。 MSDNにあるすべての機能について、「最小限のサポートされているクライアント」が見つかります。これはトリッキーです...
CRTの問題を克服するには、アプリケーション(/MTリンカーオプション)を静的にリンクできます。より大きなバイナリになりますが、動作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top