1.COM
◯「Microsoft Component Object Model 」の略
(ざっくり解説)
いろんなアプリから呼び出せるように考慮されたプログラム
(もうちょっと解説)
例① Excelの図表をWordに貼り付けることができるのはCOMのおかげ
→このコピペの仕組みであるOLE(Object Linking and Embedding)の実装にCOMが使用されている。より正確にはCOMの原型がOLE。

例② Access VBAを用いて、Excelアプリを起動し、Excelファイルを生成する処理、これにもCOMが使用されている

例③ その他、Windows周辺の技術を古くから現在まで支えている。
OCX・・・VB6時代の共通コンポーネントがこの形式だった。これがなかったらVBは流行っていなかったかもしれない。
ActiveX・・・Java、Flash、SilverlightなどリッチなWebブラウザの動作に欠かせないものとなっていた。なんでもできるが故に後年はセキュリティ関連でも悪目立ちしていた。
DirectX・・・ゲーム、CAD、DTM、画像編集、動画編集で必ず(知らないうちに)お世話になっている、グラフィックやマルチメディアを扱うAPI群。
✗ 実行可能ファイルの一種であるCOM形式(拡張子が「.com」のファイル)とは別の話
(CASLⅡでアセンブラに興味を持った人の学習には使えるかも)
✗ URLのトップレベルドメインである「.com」とも関係ない。com=commerce(商業用の意味)
2.Interop
◯「interoperability」=相互運用性の略
(ざっくり解説)
COMでできているプログラムを.NET言語で呼び出せるようにするために仲立ちしてくれるファイル。
Visual StudioでCOMプログラムを参照に加えた場合にこのファイルが自動生成されることもある。

KさんやTさんが扱っていた、タスクスケジューラの操作や、OCR機器の操作などもこの一種
(仲立ちしてくれるファイルができて何が嬉しいのか?)
公開されている範囲であれば、通常は専用アプリでしか参照できないものをCOMを通してC#/VB.NETで扱うことができる
+
Office製品であるExcelやAccessも一部の機能はCOM形式で公開されている
↓
C#でAccessのテーブル定義書が作れる、ということ。
図は、製作途中の自作ツール(上画面)でAccessのファイル(下画面)を読み込ませたもの。

参考
「Office プライマリ相互運用機能アセンブリ」

COMの使い方
C++プログラマ視点で見た場合、
・クラス毎にGUID定数が決められている
・GUID定数をオブジェクト生成時に指定し、使いたいクラスへのポインタを取得
・クラスへのポインタを使用してメンバ関数を呼び出す
VBAプログラマ視点で見た場合、
・使いたい機能(ActiveX)毎に決められている名称を調べる 「Excel.Application」等
・先程調べた文字列でCreateObject関数を呼び出す。使いたいクラスを指すオブジェクト変数を取得
・クラスへのポインタを使用してメンバ関数を呼び出す


コメント