OLE / ActiveX / COM


Derived Words

 OLE / COM / ActiveX これらの単語の使われ方が混乱している大きな原因として、それぞれの単語から派生した単語の存在が見逃せないのではないでしょうか?

・OLE オブジェクト

・OLE コントロール

 Mike McKeown 氏によれば、「OLE コントロール」という単語は NG ワードらしい。「今後使用しないで下さい。」とまで言っているので、今後は「OLE コントロール」と呼ばず、必ず「Active X コントロール」と呼ぶようにしましょう。

・OLE オートメーション

・OLE DB

−OLE DB は C++ API のため、ActiveX とは呼ばれず、OLE と呼ばれるそうですが、ActiveX DB とは言いませんね。ADO と呼びます。念のため。

OLE DB FAQ

・OLE サーバ(OLE 元文書)

・OLE クライアント(OLE 先文書)

・OLE コンテナ

・OLE DLL

・ActiveX コントロール

 OLE コントロールを拡張したものが、ActiveX コントロール。歴史と成り立ちから考えると当然と言えば当然。

OLE コントロールと ActiveX コントロールの相違点(Microsoft サイト)

 OLE を インターネット対応にした技術が ActiveX の始まりですが、ActiveX コントロールと呼ばれるものには、インターネットでの利用を前提としたライトウェイトなコントロールから、インターネットではほぼ利用不可能なヘビーウェイトなコントロールまで存在するので、OLE コントロールをインターネット対応にしたものが ActiveX コントロールと言い切れないのが微妙なところ。

 また、ActiveX コントロールは COM テクノロジによって実現されていますが、歴史的背景から考えると、ActiveX が先で、COM の出現が後なのは明らかです。これは一体どうしたことでしょう。実は ActiveX コントロールを実現している技術に、あとから COM テクノロジと名前を付けたというのが実情です。

 当時、ActiveX をとりまく環境はとても複雑で、当初の OLE は、16bit Windows (Windows 3.1)の頃に実現された技術で、Windows 3,1 は擬似マルチタスクでした。Windows 3.1 上で動作する複数のプロセス(アプリケーション)は、同一のメモリ空間上で動作していため、比較的容易に機能が実現できましたが、Win32 (Windows NT/95 以降) では、本物のマルチタスクになったため、各プロセスは独立したメモリ空間を持ち、各プロセス同士が同一のデータを共有するには複雑な手続きが必要になりました。また、インプロセスで動作する DLL 形式のコントロールや VBX (Visual Basic Custom Control) などの軽量コントロールとの統合もあり、COM テクノロジの採用となったと考えられます。

 実際、ピクチャコントロール(IPicture)などインプロセスで動作する軽量 コントロールも Excel や Word、Internet Explorer などのアウトプロセスで動作する重量級アプリケーションも全く同じ ActiveX コントロールとして扱えるのですから、素晴らしい技術と言えるのではないでしょうか。

 敢えて言えば、COM インタフェースはレイトバインディングインタフェースなので、Visual Basic のようなレイトバインディングインタフェースが前提の開発環境では扱いやすいのですが、Visual C++ のようなアーリーアインディングが前提の開発環境だと、実装がやや複雑になるのが難点と言えば難点でしょうか。

・ActiveX DLL

 ActiveX コントロールはレジストリに登録され、ActiveX コントロールへのインタフェースは、登録されたレジストリ情報を元に、参照されます。DLL は、インタフェース情報がヘッダに登録されているので、レジストリ情報が無くてもインタフェースを知ることが出来ます。それでは、この DLL のインタフェース情報をレジストリにも登録したらどうなるのでしょう。当然ながら、DLL としても、ActiveX コントロールとしても利用することができます。

 こういった形態を持つ ActiveX コントロールを ActiveX DLL と呼ぶわけですね。すっきりしましたか?ちなみに、Visual Basic や VBA での利用形態を見ればはっきりするはずです。DLL は、Declare 宣言とともに、関数インタフェースを定義しなければ利用できませんが、ActiveX コントロールは、コントロールを取り込めば、インタフェースも自動的に取り込まれ、利用することができます。

 ちなみに、Visual Basic で利用されるコンポーネントに OCX コンポーネントがありますが、この OCX、拡張子が OCX なだけで、中身は DLL です。

・ActiveX EXE

 ActiveX (COM) インタフェースが実装された EXE 形式のファイルです。ActiveX DLL に対してこのように呼ばれるものと思われます。EXE 形式なので、当然、単体のアプリケーションとしても動作します。Internet Explorer などがこれにあたります。

・ActiveX コンポーネント

 ActiveX コントロールと同意語と言っても良いのでしょうが、ActiveX コントロールでは表示を行わないコントロールを作成することもできるので、これらも含めてこう呼ぶ場合があるようです。

・ActiveX ドキュメント

・OCX

・VBX