COM コンポーネント・オブジェクト・モデル
COM(Component Object Model) マイクロソフトが提唱する ソフトウェアの再利用を目的とした技術のこと ソフトウェア間での通信に用いられる 特定の開発言語に依存せず、C言語やJavaなど、 様々な言語により開発を行うことができる COMという用語はソフトウェア開発の世界では OLE(Object Linking and Embedding) ActiveX DCOM をカバーする包括的な用語 DirectXもCOMである
概念図 OLE ActiveX COM .Net Framework
OLE(Object Linking and Embedding) Windowsにおいて、アプリケーションソフト間でデータを 転送・共有するための仕組み OLEを使うことによって、あるアプリケーションで、 別のアプリケーションで作成した機能を使うことができる
ActiveX マイクロソフトが開発するインターネットに関するソフト ウェアコンポーネントやその技術を示す用語 マイクロソフトがオブジェクトのやりとりを行う 仕組みである (OLE)からインターネットに関する 技術を分離させたものがActiveXにあたる ActiveXコントロール例としては Adobe Flash Shockwave QuickTime などがある
DCOM COM仕様にしたがって作成されたソフトウェア部品 (「COMオブジェクト」と呼ばれる)同士が ネットワークを通じて通信を行い、 データの交換や処理依頼のやり取りを行なうこと
.Net Framework Windowsアプリケーションだけでなく XML、Webサービスやウェブアプリケーションなど Webベースのアプリケーションを取り入れた環境 共通言語基盤(CLI) が標準化されている VB C# C++/CLI は.Net Frameworkを利用しているので 相互互換性を持つ CLIのマイクロソフトの実装を 共通言語ランタイム (CLR)と呼ぶ
COMの実態 実態はインターフェースと実装を分離したDLL (COMは利用形態の規範でしかない) DLL (実行時リンク)であるため、 DLLのバージョンが上がったとしても DLLを差し替えるだけでアプリケーションを リビルドすることなく実装を差し替えることが可能となる (プラグインなどの利用)
COMのルール すべてのインターフェースは IUnknownインターフェースを継承している この世でただ一つという保証があるGUIDを 振らなければならない GUIDには、 IID(インターフェースID) CLSID(クラスID) の2タイプがある GUIDによりQuery InterfaceでCOMオブジェクトを取得できる COMコンポーネントを利用するためには GUIDをレジストリに登録する必要がある (純粋なDLLと比べて、利用に付属LIBが不要な点が優位点) GUIDはVisual Studio付属の GUIDGEN.exeによって生成する