サブタイトルにもあるとおり、.NETでCOMを扱うプログラミングをメインに取り上げて行きたいと思います。
と言っても、いわゆる「COM相互運用」とかの話ではございません。
メインはアンマネージドCOM。どのへんが.NETなのかと言うと、内部実装に.NET Frameworkを使うというだけのことです。だってあんな豪華なライブラリを使わないのはもったいないですもの…。
#実はそれ以外にももうひとつ、ファイル形態をマネージドアセンブリにするメリットはあるんですが、それはまた後程。
言語はC++とC++/CLIを使います。COMの基礎を解説するときには基本に忠実なC++/Nativeを、実際にモノを作るときはC++/CLIをと使い分けますが、.NET Frameworkは道具として使うだけで、Managed Classは使いません(作りません)。
#もちろんIDLも手書きですよ。
はじめはCOMの基礎から。だんだんとOLE等にも踏み入って行きます。
いずれは、Windowsのシェル拡張プログラムを作るところまで行く予定です。
Vistaが登場しても、シェル拡張はまだアンマネージドのまま。ここを攻略するのに、C++/CLIはうってつけな言語というわけです。
シェル拡張のように、既に他人が定義しているアンマネージドインターフェイスを実装する必要がある場合、Win32 SDKが定義している大量のアンマネージドインターフェイスを、マネージド言語で再定義しなければなりません。
昔の.NET Frameworkのクイックスタート チュートリアルには、C#でシェル拡張を作るサンプルが入っていましたが、コードのほとんどがP/Invokeで、「こんなんC#じゃないやい!」と放り出したことがあります。あのサンプルに復讐する時が来たのです…(意味不明)。
なお、実装にあたりMFCやATLは使いません。COM相互運用と同様、こいつらはCOMの基礎を覆い隠してしまうからです。…というのは建て前で、俺がこれらを使ったCOM作りをさっぱり理解していないからです。
なかなか異色の試みかとは思いますが、既に被っていたら申し訳ない…。その時はご指摘くださいませ。