質問

実稼働システムの構築にまだVisual Studio 6を使用しているクライアントがいます。 STLを使用してマルチプロセッサマシンで実行するマルチスレッドシステムを作成します。

サーバーマシンの仕様を変更したり、サーバーマシンの負荷を増やしたりすると、「奇妙な」エラーの再現が困難になることがあります...

Visual Studio 6の開発にはいくつかの問題があることを知っており、Visual Stuio 2005または2008に移行するよう説得したいと思います(Visual Studio 2005があり、いくつかのプロジェクトで使用しています)。

この質問の目的は、既知の問題またはアップグレードする理由のリストと、これらの問題が議論または報告されている場所へのリンクをまとめることです。また、これらの問題がどのようにあなたを噛んだかについての現実の「ホラーストーリー」を持つことも有用でしょう。

役に立ちましたか?

解決

64ビットシステムではサポートされておらず、Vistaとの互換性の問題があり、2008年4月8日にMicrosoftによる延長サポートから削除されました

http://msdn.microsoft.com/en-us/vbrun /ms788708.aspx

他のヒント

パッチを当てていないVC6 STLはスレッドセーフではありません。こちらをご覧ください http://www.amanjit-gill.de/articles/vc6_stl.html 、パッチはサービスパックに含まれていません。 Dinkumwareから直接取得する必要があります(ここから http://www.dinkumware.com/vc_fixes.html )その後それらを各インストールに適用します...

職場で見た最大の問題は、わずかに複雑なテンプレートクラスや関数でさえ処理できないことです。この事実だけでも、会社で最も熱心なVS6ファンの一部が、VS2005のアップグレードと使用開始を余儀なくされています。テンプレートの問題に加えて、インテリセンスがはるかに優れており、デバッグがより簡単で正確になり、多くの人がIDEをナビゲートしやすくなっています。これまで見てきた唯一の欠点は、2005年のビルドが6のビルドよりも少し長くかかることです(ただし、おそらくコンパイラの堅牢性の副作用です)。

VS6の既知の問題のサンプルについては、次のサイトもご覧ください。

少し突っついたらもっと見つけられると思います。

VS6は、現在のC / C ++標準に従ってコードをコンパイルしません。たとえば、

  • ループの誤った(古い)スコープ規則があります。少なくとも1つのMSFT SDKが正しいセマンティクスを期待するコードで更新されたため、SDKはVS6でコンパイルできなくなりました。
  • 最も単純なテンプレート構造以外のすべてをコンパイルするのは困難です。
  • 最近の標準の更新で違法と宣言されたテンプレート構成体をコンパイルします(構成体は通常のユーザーが期待することを実際に実行しないため)。

operator newはC ++仕様に準拠せず、割り当ての失敗時に例外をスローしません。これを修正するのは簡単ではありません。

参照: http://msdn.microsoft.com/en-us/magazine/cc164087.aspx

アップグレードする最大の理由の1つは、標準に準拠したC ++コンパイラ(まだ100%ではありません)であったため、プロジェクトでより多くのC ++機能を活用でき、奇妙なハックや回避策を心配することなく、バグを見つけます。

Vistaとの互換性はありません。ヘック、VS 2005がVistaで抱えている問題の長いリストがあります。

そうは言っても、VSの改善のほとんどは、C ++ネイティブコード以外のすべてに適用されるようです。私が見ているのは、より多くの標準準拠です。これは重要ですが、劇的なことはほとんどありません。

Visual Studio 6は最新のWindows SDKと互換性がないため、(少なくとも簡単に)最新のOS機能を利用できません。

具体的な詳細はもうありませんが、職場でアップグレードしたときに、VC 6が静かにすり抜けるかなりの数のエラーを新しいコンパイラが見つけたということだけを投げ込みます。アップグレードによる製品の堅牢性の向上。

STLを使用する場合、最近リリースされた機能パック TR1

自分のものをアップグレードしましたが、比較的複雑ではありません。アップグレードするための短所は、 VS 2005 DLL Hell

です。

VS 2008バージョンのSTLは / clr でコンパイルされるため、マネージドワールドへの移行に関心がある場合は、古いコードをすべて失う必要はありません。

デフォルトでは、新しいバージョンの方がコンパイラとライブラリが優れています。ただし、既存のプロジェクトを新しいスタジオに移植することは必ずしも容易ではなく、コンパイラとライブラリの両方を手動でアップグレードできます。

ちょうど1年前にインテルコンパイラでVS 6.0を使用していました。その時点で古いコードがたくさんありましたが、ポインターとしてイテレーターを脅したり、逆もまた同様でした。すべてが本当に面倒で怖いので、アップグレードができませんでした。

しかし、結局のところ、アップグレードする必要がありました。現在使用しているフレームワークは、VS 6.0では動作しないからです。これが究極の理由だと思う:-)

サードパートライブラリも、限られた数のコンパイラのみをサポートします。クライアントは、バグ修正や機能のアップグレードを受け入れられない可能性があります。

たとえば、Boostとして広く使用されているライブラリでさえVS 7.1以降のみをサポートしています(ソース

また、VC6には古いATLバージョンが同梱されているため、データ実行防止(DEP)でも問題が発生する可能性があります。通常どおり、詳細については Raymond Chen をご覧ください。

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