Object Linking and Embedding

Object Linking and Embedding （OLE、オーレ、オブジェクトのリンクと埋め込み）は、マイクロソフトが開発した、オブジェクトをやり取りするための仕組み・規約である。
開発者に対しては、OLEコントロール拡張（OLE Control Extension, OCX）のような、カスタムユーザーインターフェイス要素の開発と利用をもたらす。
技術詳細的には、OLEオブジェクトは、IOleObjectインターフェイスを実装した何らかのオブジェクトである（オブジェクトの要求仕様によっては、他のインターフェイスをともに実装していることもある）。

概要 
OLEは文書の一部分を他のソフトで編集させ、それを元の文書に取り込むことも可能にしている。たとえば、DTPでは、テキストをワープロソフト、図をペイントツールやドローツールで編集するといった具合である。また、他のデータへの参照を文書に含めることもでき、その場合参照先のデータが変更されると、参照が含まれる文書にも即座にその変更が反映される。

OLEの初期の用途は複合文書の管理のためであるが、ドラッグアンドドロップやクリップボードによるアプリケーション間でのデータの転送のためにも使われている。また、OLEによるオートメーションは、JScriptやVBScriptを経由して、アプリケーションの動作を自動化するスクリプティングにも使われている。

OLEを活用しているソフトウェア実例としては、Microsoft Office製品のほか、Windows版Adobeクリエイティブ製品のが挙げられる。

歴史

OLE 1.0 
OLE 1.0は1990年、動的データ交換 (Dynamic Data Exchange, DDE) の後継として公開された。DDEが2つのアプリケーションの間で限定的なデータ転送を行う仕組みだったのに対し、OLEは2つのドキュメント間の連携（リンク）や、あるドキュメントに別のドキュメントを埋め込みを管理する機能を持った仕組みであった。

OLEサーバとクライアント間の通信には、システムライブラリを介するが、これには仮想関数テーブル (vtable, VTBL) が用いられた。VTBLには、OLEシステムがサーバやクライアントとの通信に用いる関数へのポインタが所定の構造に従って収められている。サーバとクライアントに対応するシステムライブラリは、OLESVR.DLLとOLECLI.DLLで、当初はこの2つの間の通信にWM_DDE_EXECUTEメッセージが利用されていた。

OLE 1.0は後にCOMやDCOMとしてソフトウェアの部品化を実現するアーキテクチャとなっていった。

OLEオブジェクトがクリップボードやドキュメントに埋め込まれる形で存在するとき、2つのWindowsネイティブな表現形式（ビットマップとメタファイル）も保存されている。これにより、オブジェクトをメモリ上に作成するアプリケーションをロードすることなく画面表示が可能になる。さらに、そのOLEオブジェクトに対応する適切なアプリケーションがインストールされていれば、オブジェクトを編集できる。

OLE 2.0 
OLE 1.0の改良版として現れたOLE 2.0は、その目指すところはOLE 1.0と大きな違いはないが、実装面では、生のVTBLではなくCOMを使って実装し直されたという大きな違いがある。また、、ドラッグ・アンド・ドロップ、インプレースアクティベーションなどの新機能が加わった。

関連項目 
 Component Object Model
 ActiveX
 Windows Script Host
 Active Scripting
 Microsoft Office
 Bonobo、KPart
 OLE for Process Control
 スクラップ (Windows)

脚注

外部リンク 
 

コンピュータのユーザインタフェース
マイクロソフトのAPI