1-1-3. MFCの功罪
現在の中・大規模な開発環境では、マイクロソフト社のC++とMFCを使用した方法が一番多く使われているのではないかと思われます。ここではこの開発法について少し考えてみたいと思います。
MFCは便利
- 非常に強力なクラスライブラリが開発をサポートします。
- 新技術はまずMFCがマイクロソフトから提供されます。
- 開発に必要な情報が書籍やインターネット上で比較的たくさん存在します。
MFCは不便
- C++の仕様を100%理解する必要があります。
- APIの他に面倒なクラスライブラリを習得しなければいけません。
- APIに慣れた人には、クラスライブラリの仕様には戸惑うでしょう。
- クラスライブラリは深く理解しないと、目的どおりの動作をしません。
- クラスライブラリの目的以外の動作を行なうのは困難です。
- 巨大なDLLファイルのサポートが必要です。
MFCの広告やマニュアルを読むと、面倒なAPIをパッケージして使い易くしてくれているので、簡単になったと思われているかもしれません。しかしこれは逆です。たしかにウィザードで、あっという間にスケルトン(アプリケーションの骨組み)を作成するので、簡単だと思われるかもしれません。しかし何百もあるクラスを理解し、ほんの数行の説明しかないメンバ関数を利用して、アプリケーションを記述しなければいけません。
本来クラスとは、詳細な仕様と動作の説明がないと使うことが困難な技術なのです。それが提供されているとはとても言えません。そのせいでしょうか、Visual−Cにはクラスライブラリのソースコードが付属しています。またインターネット上にはMFCに関したサイトがたくさんあります。ただソースコードを読んで、その動作や機能を理解するのは規模が大きいので非常に大変な作業です。
MFCxx.DLLが必要
MFCは別のDLLでサポート関数を提供するダイナミック方式と、アプリケーションの内部にサポート関数を埋め込むスタティック方式があります。スタティックだとアプリケーションが巨大になるので、ほとんどはダイナミック方式を採用します。しかもこの方式では、MFCを使うアプリケーションは、いくつ起動してもDLLは1つで済みます。DLLの本来の目的がいかんなく発揮され、なんと効率の良いシステムなんだろうと、思われるかもしれません。でもちょっとお待ちください。皆さんのシステムでMS−DOSプロンプトで以下の命令を実行してみてください。
C:>CD \WINDOWS\SYSTEM
C:>DIR MFC*.DLL
たくさんのDLLファイルを表示すると思います。1つで良いはずなのになぜでしょう。これは、MFCがいくつものバージョンがあり、アプリケーションが必要とするバージョンが異なるためです。また日本語版とはUS版とかいくつかのバラエティもあるようです。
このバージョンの違いを吸収できなくて、別のファイルで提供する方法は、Visual BASICなどでも同じようです。
まとめ
大部分の問題は、DLLファイルの件を別にすれば、MFCを使うには情報が最大の問題です。ただし本書では、MFCの事は触れません。