Microsoft Foundation Class
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Microsoft Foundation Class (MFC)は、マイクロソフトがVisual C++用に開発した、Windows用のアプリケーション構築のためのアプリケーションフレームワーク(クラスライブラリ)である。
MFCでは、Windowsアプリケーションにおけるメッセージハンドラやウィンドウフレームワークなどの基礎的な部分をあらかじめパッケージ化したほか、ウィンドウ内の描画や、可変長の文字列、配列の管理など、一般にアプリケーションでよく使われるようなクラスを備えている。
SDKを使ってWindows APIを直接呼び出すのに比べ、Visual C++の統合環境との親和性が高く開発が容易になるという利点があるが、一方でMFCに過度に依存したプログラムを書くと他のOSへの移植が難しくなるといった問題もある。
[編集] 歴史
MFCは1992年、16ビットバージョンのWindowsをターゲットとし、マイクロソフトのC/C++コンパイラ 7.0とともに発売された。これは開発ツールの分野におけるシェアを高めようとしていたマイクロソフトの努力の一環であり、MFCはプログラミング言語C++の能力を知らしめるよう設計されていた。当時、C++は商用アプリケーションの開発においてCからの移行が始まったばかりであり、C/C++ 7.0はマイクロソフトのコンパイラとして初めてC++をサポートした。MFCはMacintoshのThink Class Library(TCL、後にSymantecによって買収された)に大きく影響を受け、その構造の多くをTCLから受け継いでいた。
同時期、Borland Cコンパイラに対応したObject Windows Library (OWL)が、競合製品としてBorlandから販売されていた。OWLの設計はより厳密にオブジェクト指向に準じていたので、一時期の間MFCよりも好評であった。しかし、Windowsへの機能追加とOWLのアップデートに時間差が生じてしまったので、OWLはシェアを失った。
[編集] 仕様
MFCが発売された時、マイクロソフトはマクロの活用によってC++の文法を拡張し、ウインドウメッセージ、例外処理、実行時型情報、クラスの動的インスタンス化などを管理していた(例外処理、実行時型情報などは当時のC++の言語仕様にも実装(コンパイラ)にも存在しなかった)。ウインドウメッセージのために構文に変化を加えたことは、不要なvtableの使用を避けることでメモリの消費量を抑える狙いがあった。さらに、構造がより具体的になり、Visual C++に付属する多様なツールがソースコード全体を解析することなく処理できるという効果もあった。メッセージ処理のマクロは、C++の仮想関数の代わりとなった。ただ、一部のマクロはコンパイラによる型チェックを無効化することがあるので、しばしばバグの原因となった。
MFCを使用することの主な利点はWindows APIにオブジェクト指向プログラミングモデルを導入するという点である。もう一つは、Windowsのリソースに関連した一般的なデータ型に対するラッパを提供するという点である。これらのラッパを使用することで、スコープを出た時に自動的にリソースのハンドルを解放させることができる。さらに、MFCはModel View Controllerモデルに基づいたアプリケーションを開発するためのドキュメント/ビュー フレームワークを提供する。
MFCの主な欠点は、多くのオペレーティングシステムで利用できないという点である。MainsoftはUNIXで利用可能なMFCツールを開発した[1]。マイクロソフトは、1990年代にMacintoshに対応したMFCを販売していたが、それ以降はMacintoshに対するVisual Studioのサポートは中止された。
[編集] バージョン
製品バージョン | MFCバージョン |
---|---|
Microsoft C/C++ 7.0 | MFC 1.0 |
Visual C++ 1.0 | MFC 2.0 |
Visual C++ 1.5 | MFC 2.5 |
Visual C++ 2.0 | MFC 3.0 |
Visual C++ 2.1 | MFC 3.1 |
Visual C++ 2.2 | MFC 3.2 |
Visual C++ 4.0 | MFC 4.0 |
Visual C++ 4.1 | MFC 4.1 |
Visual C++ 4.2 | MFC 4.2 |
Visual C++ 5.0 | MFC 4.21 (mfc42.dll) |
Visual C++ 6.0 | MFC 6.0 (mfc42.dll) |
Visual C++ .NET 2002 | MFC 7.0 (mfc70.dll) |
Visual C++ .NET 2003 | MFC 7.1 (mfc71.dll) |
Visual C++ 2005 | MFC 8.0 (mfc80.dll) |