「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- 本ページでは、Cランタイム(CRT)や開発環境のバージョンアップに伴う
Visual C++プログラムのコンバージョン移行の作業範囲を扱います。
- また、移行見積もりに関しては、プログラムの移行性評価作業として、1・2本のプログラムをサンプリングし、
実際に移行~テストをした上で、移行作業全体の工数を見積もることをお薦めします。
詳細 †
CRTバージョンアップ †
- VC++は、CRTのバージョンアップの際、.NETのようなバイナリレベルの後方互換により、 旧バージョンで開発したプログラムが、
新バージョンのラインタイムで自動的に動作するということはありませんので、新しい開発環境を用意してプログラムをリビルドする必要があります。
- また、スタティック・リンクする場合を除いて、CRTの再頒布が必要になります。
- この際、プラットフォームが当該CRTのバージョンをサポートするかどうかも確認して下さい。
- このため、CRTバージョンアップ ≒ 開発環境のバージョンアップとなり、
- 移行に必要となる作業は、コンバージョン移行的なものになります。
- このコンバージョンは、.NETと同様にVSに付属の変換ツールで変換を行います。
- CRTバージョンアップの注意事項として、関連リンクにもある、
「DLL の境界を越えて CRT オブジェクトを渡す場合に発生する可能性のあるエラー」のトピックがあります。
- ここで述べられていることを簡単に要約すると、
「ファイル ハンドル、ロケール、環境変数などのCRTオブジェクト、
newまたはmallocで明示的に、またはstrdup、strstreambuf::strなどで暗黙的に割り当てたメモリ ポインタを
DLLの境界を越えて(関数に)渡す場合、双方のCRTが異なるバージョン、実体(スタティック リンク)を
使用しているとプログラムが正しく動作しない可能性がある。」
- ということですので、これを考慮して(DDLなどのプロジェクトも移行範囲に含めるべきか)移行計画を決定する必要があります。
開発環境のバージョンアップ †
- 上記で説明したように、CRTのバージョンアップ ≒ 開発環境のバージョンアップとなります。
- また、CRTや開発環境のバージョンアップのバージョンアップに伴い、 使用する3rdパーティ製ライブラリの当該環境上でのサポートが無くなる場合、
代替ライブラリのI/F変更発生に起因する修正範囲拡大の可能性があります ので、その場合の移行作業は手修正有りのコンバージョン移行に近づきます。
CRTセキュリティ強化 †
- 新しい開発環境では、バッファ オーバフローなどの脆弱性に対応した、
_s ("secure") のサフィックスの付与された新しい関数が用意されています。
この新関数にはインターフェイスに変更がありますので、旧関数から新関数に変更する作業は、
手修正有りのコンバージョン移行的なものになり、作業は容易ではありません。
- このため、「#define CRT_SECURE_NO_WARNINGS」を定義して、
旧関数を使用した場合にコンパイラが出力する警告を無効にし、
CRTの新しい機能である 「パラメータ検証」を使用することで対応するという方法もあります
(既存の多くの関数に対しても、関数に渡されるパラメータ検証に対する仕様が変更されている)。
- この「パラメータ検証」により無効なパラメータが検出されると、
CRTは、現在割り当てられている「無効なパラメータ ハンドラ」を呼び出します。
このハンドラの既定の動作は、ワトソン博士(dtwtsn32)のクラッシュ レポートを
起動させ、実行中のアプリケーションをクラッシュさせるものとなっています。
- また、このハンドラの動作は、
「_set_invalid_parameter_handler」関数を使用することでカスタマイズできるので、
無効なパラメータが検出された場合に、アプリケーションを終了させずに、
アサートなどでこれらの問題をチェックするという処理を実装することも可能です。
- 詳細は関連リンク中の関連項目(CRT のセキュリティ強化など)を参照下さい。
マルチバイト文字セット(MBCS)の廃止 †
MFC は Unicode しかサポートしなくなるらしいので
VC++物のメンテナンスは、これから大変かもしれません。
- 警告を消すだけなら、#define NO_WARN_MBCS_MFC_DEPRECATIONの1つ追加でできる。
- しかし実際は、\0 や バッファ長の処理をうまく書き換える必要がある。
関連リンク †
MSDN > Visual Studio 2005 > Visual Studio ドキュメント †
Visual C++ †
- リファレンス > ライブラリ リファレンス > ランタイム ライブラリ
スマート デバイス開発 > Visual C++ を使用したプログラミング †
MSDN > Visual Studio 2008 > Visual Studio ドキュメント †
Visual C++ †
MSDN > Visual Studio 2010 > Visual Studio ドキュメント †
Visual C++ †
XLsoft エクセルソフト > MKS Toolkit †
http://www.xlsoft.com/jp/products/mks/index.html
- MKS Toolkit 製品を使用することによって、
UNIX から Windows ベースのワークステーションおよびサーバーへ移行する際に、
既存の UNIX ソフトウェア資産および知識を有効活用することができます。
- MKS Toolkit 製品は、UNIX プラットフォームのスクリプト、ソースコード
および動作環境を簡単に Windows プラットフォームに統合します。
Tags: :移行