web-dev-qa-db-ja.com

COMとOLEの違いは何ですか?

COMとOLEの違いは何ですか?

47
TASNEEMUDDIN
  • OLE =オブジェクトのリンクと埋め込み
  • DDE =動的データ交換
  • COM =コンポーネントオブジェクトモデル

OLE:これは、あるドキュメントの一部を別のドキュメントの一部にリンクする方法です。たとえば、Excelグラフが埋め込まれたPowerPointスライドがあるとします。 Excelスプレッドシートが更新されると、グラフも更新されます。あなたがパワーポイントを再び開くとき、魔法のようにそれは持っています! (この例はリンクされたオブジェクトです。)埋め込みオブジェクトは同じですが、Excelスプレッドシートが外部ファイルに存在せず、スプレッドシートのデータはPowerPointファイルに含まれています。

リンクされたオブジェクトを使用して、Excel、Word、およびPowerPointドキュメントを相互に埋め込むことができます。 Microsoft数式エディタなどの他のアプリケーションは、Wordへの埋め込みをサポートするために特別に作成されました。

OLE 1はDDE上に構築され、ソースデータが変更されたときにウィンドウメッセージを使用してアプリケーションに通知し、通常はHGLOBALグローバルメモリハンドルを使用してデータを渡しました。

OLE 2 COM上に構築されました。

[〜#〜] com [〜#〜]は、言語に依存しないオブジェクト指向コンポーネントモデルであり、DCERPCに基づくABIです。 RPCシステムとして、同じマシン上のプロセス間、および後でDCOMを使用して異なるマシン上のプロセス間のリモート呼び出しをサポートしました。当初、COMはMAPIのアーキテクチャの一部として使用されていました(COMオブジェクトモデルを使用しますが、COM登録サービスは使用しません)。その後、レジストリとオブジェクトのアクティブ化およびその他のサービスを備えた一般的なオブジェクトモデルとして正式にリリースされました。 (たとえば、モニカや構造化ストレージ。)

OLEオートメーション OLEとは何の関係もありません-これはブランディング接続のみです。 OLE Automationは、Visual Basicと互換性のあるCOMのサブセットであり、基本的なデータ型のみ(たとえば、符号なし整数や構造体はサポートしない)をサポートしますが、オブジェクト(COMインターフェイス)を含みます。

OLEコントロールただし、OLEに関連しています。これらは主にVB 4以降のVisualBasicユーザーを対象としたビジュアルコンポーネントですが、ビジュアル要素はOLE 2の埋め込み機能を使用して提供されます。ホストすることもできます(理論的には、適切に記述されている場合)OLE 2埋め込みオブジェクトをホストできるものであり、C++アプリケーションでもよく使用されていました。通常、実行時のプログラミングにはOLEオートメーション互換インターフェイスを使用します。

ActiveXコントロールは、MicrosoftがWebアプリケーションを拡張するためのテクノロジを普及させようとしていたときからのCOMオブジェクトのマーケティング用語です。

70
Ben

COMはOLE進化しました。OLEは、アプリケーション間でデータを共有しやすくするためのインターフェイスとデータストレージメカニズムのセットでした。COMは、インターフェイスを使用するだけでなく、自然に拡張されたものです。データを共有しますが、ランタイム機能-使用を容易にするためにデータの前に実際のメカニズムがあります。私は常に、CとC++の違いとして大まかに描いてきました。ここで、Cを使用すると、ヘッダーファイルと構造を共有でき、C++を使用するとカプセル化されたオブジェクトを共有します。

ちょっとした石鹸箱として、私はまだOLE構造化ストレージを見逃しています。コラボレーションシステム間で不透明(OPAQUE)データストレージを共有することには素晴らしいことがあるからです。ドラッグアンドドロップ/クリップボードとして見ることはまだそれに依存しています、.Netの置き換えはどうなるのだろうか?

4
codekaizen

OLEテクノロジは、COMを別個のエンティティとしてかなりの時間前から使用しています。それ以前は、オブジェクトの埋め込みとリンクの方法としてOLEが実装されていました。典型的な例は、Word文書内にスプレッドシートを埋め込む例です。COMの基盤となるテクノロジーが有効になり、VBなどの他の言語もこれらのオブジェクトと対話できるようになりました。

その後、歴史的に、言語の独立性、参照カウント、羨望の的となるモデルのスレッド化など、これらのクールなことを検討しているサーバータイプのプログラマーがたくさんいましたが、埋め込みテクノロジーについてはあまり気にしませんでした。論理的に行うべきことは、基盤となるサーバー機能をCOMとして分割することでした。これは、より自然に低レベルのAPIでした。

両方のテクノロジーはまだ存在しています。 OLEは、最近のActiveXとリンクしているか、同じである可能性があります。

1