ATLとMFCの変更点 from ver.7.0
ATL と MFC の変更点 : ATL 7.0 と MFC 7.0
MFCに絡む部分だけ抜粋
- dllの互換性。
Visual C++ .NET の ATL と MFC のクラスは、以前のリリースの同じクラスとバイナリ互換性がありません。このため、mfc42.dll を使用してビルドしたソース コードは、Visual Studio .NET でビルドし直す必要があります。また、アプリケーションで使用する DLL ファイルや LIB ファイルも、Visual Studio .NET でビルドし直す必要があります。
これは普通やってる。ので問題なし。
CException は、MFC (Microsoft Foundation Class) ライブラリ内のすべての例外に関する基本クラスです。現在の CException は抽象基本クラスであるため、CException オブジェクトを直接作成することはできません。派生クラスのオブジェクトを作成する必要があります。オブジェクトを直接作成すると、エラーが発生します。
派生クラス作らなきゃいけないのかぁ。めんどくさい。
- CStringクラス
CString に UNICODE バージョンと ANSI バージョン (CStringW と CStringA) ができました。
例えば、CStringから文字列を取り出すようなコーディングしている場合は要注意。古いVS6のソースの改修でプロジェクトを再作成した場合は要注意(デフォルトの文字コード設定がUNICODEになってたりするから)。
- CTimeクラス
CTime クラス は、基になる __time64_t データ型を使用します。MFC 6.0 では、CTime は 32 ビット型であった time_t データ型を使用していました。この変更の理由は、2038 年 1 月 19 日の 3:14:07 より先の時刻をサポートするためです。
倍ですか、サイズ。何気にきつい変更。
- CWnd::DestroyWindowでToolTipsを表示すると発生するアサーション対策のためのメンバ変数の変更
DestroyWindowでToolTips表示するシチュエーションがよくわからないのですが、とにかくアサーション発生しなくなった、と。乙。
- BOOL型ではなくbool型であるブール式
class CMyClass : public CObject { BOOL bFlag; void Serialize (CArchive& ar)) { if (ar.IsStoring()) ar << (bFlag != FALSE); // breaking change else ar >> bFlag; } };
上記のようなコードで、bFlag != FALSE は、
-
- .NETより前::4 byteで評価(int型のtypedef)
- .NET以降::boolとして評価(1 byte)
される。よって、結果をアウトプットする際には、型に応じたキャストが必要(この場合はBOOL)。何気に知っておいたほうがよさげなトリビア系情報。
- CColorPropPageとCFontPropPageの削除
CLSID_StockColorPageとCLSID_StockFontPageを代わりに使う。msstkprp.dllが別途必要になる。
- ON_MESSAGE の変更点
ON_MESSAGE マクロの関数パラメータは、afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM) 型と一致する必要があります。
ウィザードで生成されたON_MESSAGEの引数に「&」がくっついていてたのはこれだったのか。
- OLE DBテンプレートの変更点
なんか、いろいろ。変更というよりは新装オープン。