Windowsプログラミングに関する世界観(ATL/COM)です。
.NETも参照のこと。
(以下の文章は、分散オブジェクトやCOMについて何も分かっていない、経験や知識のない自分の書いた文章であるため、一般的な良識と比較して間違ったことを教えています。注意してご覧ください。)
UNIXでは、中央コンピュータと端末、あるいはXのようにクライアント・サーバモデルでの、ネットワーク分散環境を利用できる。たとえば、端末のXサーバから別のパソコンのXクライアントを実行できる。
こうしたUNIXの分散システムとは全く別のやり方をしているのが、MicrosoftとWindowsが頑張っていたCOM。
たとえば、たくさんのPCがあるとして、その中にアプリケーションを導入するのであれば、同じソフトウェアを全部のOSに入れることもできるが、ネットワークに繋がった別のコンポーネントを再利用して使いたい場合がある。
そうした時に、それぞれのソフトウェアをコンポーネントに分割して、相互に通信し合って、決められたインターフェースで各PCが協調して動くようにする。また、遠隔地に離れたコンポーネントでも、サービスとしてそのコンポーネントを利用可能にする。
この仕組みは先進的だったため、LinuxでもCOMに似たCORBAを利用してこの仕組みを模倣したGNOMEと呼ばれるデスクトップ環境があり、Linuxの標準となっている。MozillaでもXPCOMと呼ばれる同様の技術があるほか、Plan 9などの研究用の分散OSでは、ファイルシステムとネットワークプロトコルを統合し、分散PC環境で同じアプリケーションリソースを共有できるようにしている。
ただし、COMはHTTPのサービスと比べて普及せず、MicrosoftはCOMよりもさらに先進的な.NET Frameworkを開発し、GNOMEでもMonoとしてこれを模倣したが、これも単なるJavaの亜種であると評価されている。ただし.NET FrameworkのクラスライブラリはJavaを模倣したためとても使いやすく、Windows開発者から人気で、唯一の欠点である「関数やクラスの内部の仕組みが分からず使うだけになってしまう」という点も、.NET Coreと呼ばれる.NET Frameworkのオープンソース化が進んでおり、MSの技術は着実に新しくなっている。きちんと競争しなければ、Linuxの未来や優位性もMSに奪われてしまうだろう。
COMはコンポーネント技術だと見做されているところもあり、ActiveXのようにブラウザの中に別のソフトウェアをコンポーネントとして埋め込む(Flash Playerなど)ことができるが、分散システムとしての側面を見れば、「ネットワーク上に無数に散らばるコンポーネントとしてのオブジェクトが通信し合ってたくさんの操作を行う」という先進的なプラットフォームになり得た技術である。これはGNOMEでも同様で、ある意味GNOMEアプリケーションの中で別のGNOMEアプリケーションをコンポーネントとして使うために、CORBA/Bonoboが利用されている実態がある。
COMについて言えば、「ある程度の機能のセットの再利用」であると言えます。
たとえば、ActiveXで作られたFLASHなどは、Webブラウザの中にアニメーションを埋め込むことができますが、これはアニメーション表示機能だけをWebブラウザに組み込んでいます。
ActiveXを用いたJScriptやVBScriptでは、ファイルの読み書き機能を使うことができます。
ほかにも、DirectXなどもCOMを利用して作られています。
このように、ある程度のまとまった機能をそれぞれのアプリケーションに提供し、コードを再利用して共有するために、コンポーネントをWindowsが提供する、これがCOMであると考えられます。
後日注記:また、Microsoft社のWebブラウザであり、かつて標準的地位を持っていたIE(Internet Explorer)も、COMコンポーネントの集合体として開発されています。
ActiveXも参照のこと。
Windowsにおいて、COMやActiveXを用いて、ソフトウェアコンポーネントを作ることができます。
COMは特定のプログラミング言語に依存しません。ですが、プラットフォームにはWindowsが主に想定されます。ただし、プロトコルが公開されているため、MozillaによるXPCOMのようなクロスプラットフォーム実装もあります。
しかしながら、COMの機能は今では.NET Frameworkに置き換えられたところも多いです。MicrosoftはCOMに代わって.NETを大きく推進しています。
ATLはCOMを利用するためのラッパーで、ActiveXを開発する際に良く用いられる。
MFC/ATLと同等のものとして軽量なWTLが存在する。WTLはATLの拡張ライブラリで簡単にWindowsアプリケーションの開発ができる。
OLEは、Windowsにおける「複合ドキュメント」のスタイルで、のちにCOMを利用したコンポーネント通信・結合技術に進歩した。
ActiveXやOLEはCOMを利用して成立している。
後日注記:OLEはMS-Officeなどで使われている技術で、たとえばワードの文書の中でエクセルのデータを使ったり開いたりすることができる。これがCOMに進歩した。GNOMEのCORBAによるBonoboはこれをよく似た技術。
詳しくは以下が参考になる。
DCOMは分散ネットワークにおけるコンポーネントの通信技術で、Microsoftにより仕様が裁定された。
ネットワーク上のコードとサービスの再利用のためのモデルとなるとされていたが、さまざまな問題から、HTTPとWebブラウザの組み合わせに敗北した。
Microsoftの.NET Frameworkは、DCOMを進歩させたものである。
.NETも参照のこと。
GNOMEのミゲル・デ・イカザなどは、分散コンピューティングへの対応が十分ではないUNIXをより進歩させるものだとして、GNOMEの分散コンポーネント通信技術にDCOMと同様の技術であるCORBAを採用し、.NETに対してMonoを開発した。
XPCOMはMozillaによるクロスプラットフォームなCOM実装。Mozillaを参照のこと。
CORBAやJavaBeansや分散OSやPlan 9も参照のこと。
以下のページが参考になります。
詳しくは以下のようなサイトが参考になる。
COMを使用したプログラミング。
以下にサンプルコードがあります。
以下にサンプルコードがあります。
以下はMSDN。