ATL と MFC の変更 : ATL 7.1 と MFC 7.1
更新 : 2007 年 11 月
メモ ここで説明している機能のいくつかは、現在のバージョンの Visual C++ には存在しない可能性があります。
Visual C++ .NET 2003 では、ATL と MFC のライブラリとウィザードが変更され、その一部は既存のコードに影響を及ぼす可能性があります。
ATL 6.0 から ATL 7.1 にプロジェクトを移行するときのウィザードの問題 (ATL)
CAtlServiceModuleT からの CAtlServiceModuleT::InitializeSecurity の削除 (ATL)
SetRfc822Time 関数の更新
既定の ATL ウィザードで作成された、Windows NT で実行できないプロジェクト
ATL 6.0 から ATL 7.1 にプロジェクトを移行するときのウィザードの問題
Visual C++ 6.0 プロジェクトを Visual C++ .NET 2003 プロジェクトに変換するときは、メッセージ ハンドラがメッセージ マップの最後に追加されます。メッセージ マップに CHAIN_*_MAP(...) エントリがある場合、ウィザードによって追加された項目はエントリの最後に含められ、処理できない可能性があります。
たとえば、Visual C++ 6.0 ATL コントロールを含むプロジェクトを Visual C++ .NET 2003 プロジェクトに移行する場合、OnInitDialog ハンドラは呼び出されません。これは、MESSAGE_HANDLER が CHAIN_MSG_MAP(...) エントリの前ではなく後に配置されていることが原因です。
OnInitDialog ハンドラが呼び出されるようにするには、CHAIN_MSG_MAP(CComControl<Name of class>) という行を CHAIN_MSG_MAP(...) エントリの最後に含める必要があります。または、OnInitDialog 基本クラスの実装で、必要な初期化を実行する必要があります。
CAtlServiceModuleT からの CAtlServiceModuleT::InitializeSecurity の削除
Visual Studio .NET 2003 では、このメソッドは基本クラスに実装されません。詳細については、「CAtlServiceModuleT::InitializeSecurity」を参照してください。
SetRfc822Time 関数の更新
バッファ オーバーランの発生を回避するために、SetRfc822Time 関数には、返される時刻データの格納に必要な文字列長を示す追加のパラメータと戻り値があります。
既定の ATL ウィザードで作成された、Windows NT で実行できないプロジェクト
Visual Studio .NET 2003 では、MIDL コンパイラの既定の設定が /robust であるため、Windows NT 4 で実行していたプロジェクトが応答しなくなります。
MIDL コンパイラのフラグを /no_robust に変更するには
プロジェクトを右クリックし、ショートカット メニューの [プロパティ] をクリックします。
[プロジェクト プロパティ] ダイアログ ボックスが表示されます。
左ペインの [MIDL] をクリックし、[コマンド ライン] を選択します。
[追加のオプション] ボックスに、「/no_robust」と入力します。