このページの本文へ

前へ 1 2 次へ

Windows Info 第376回

COM(Component Object Model)は古い技術だが、いまだに現役 あらためて解説する

2023年04月23日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 前回解説したプレビューハンドラなど(「エクスプローラーのプレビューウィンドウについて解説する」)、エクスプローラーの拡張機能は、COM(Component Object Model)を使って作られている。

 COMは、すでにWindowsでは主流ではなく、後継として.NET Frameworkが登場している。しかし、COMは廃止されたわけではなく、いまだにWindowsのさまざまな場所で使われ続けている。というのも、Windows XPまでは、WindowsのOSの主要オブジェクト技術であり、Windows自身がCOMで構築されていたと言っていいほど利用されていたからである。

 エクスプローラーや関連技術でいまだにCOMが使われているのは、その名残でもある。長らく続けてきた本連載だが、COMについては解説するタイミングを失っていた。ちょうどいい機会なので、今回はCOMを簡単に解説してみたい。

COMの前身となるOLEは1990年に開発された

 COMの源流は、WordにExcelのシートを入れるための「OLE(Object Linking and Embbeding)」技術にさかのぼる。

COMの基本になるVTBLは、OLE2.0やOCXで使われたが、当時は「COM」とは呼ばなかった。1997年頃になって、OLE関連の技術をまとめてCOM、Component Object Modelという名称に統一された。その後、DCOMやCOM+といった派生技術もできたが、.NET Frameworkが後継技術として2000年に登場した

 1980年台前半にXeroxのSTARなどで実現されていた「Compound Document」を、Windows上で実現するための技術としてOLEが1990年に開発された。当時は競合技術もあり、MicrosoftはOLEの開発に力を入れた。競合は結果的には姿を消したが、勝ったというよりも自滅しただけで、結果的にちゃんと動いたOLEが生き残ることになった。

 当時のWindows 3.1(1992年)では、i486やPentiumなどの32bitプロセッサが使われていたが、クロック周波数は二桁~300MHz程度。DRAMも16Mbitチップの世代。今から考えると、かなり非力なマシンで実現された技術だ。もちろん、PC性能の伸びしろは考慮されていただろうが、COMによるコンポーネントの呼び出しは比較的低コストになるように作られている。

 OLEは、その後OLE2.0となり、このときに現在のCOM技術のベースとなる仮想関数テーブル(VTBL)が採用された。しかし、当時はCOMという名称は使われていなかった。OLEは、Visual BASICの機能拡張コンポーネント技術にも使われ、このときに作られたのがOLE Control Extensions(OCX)である。OCXの登場により、Visual BASICは活況を呈した。OCXで作られたさまざまなコンポーネントが流通し、これをインストールすることで、簡単にVisual BASICでできることが増えたからである。

 OCXはその後、Internet Explorerにも実装され、ActiveXという名称になる。OCXなどCOMコンポーネントは、Visual C++のATL(Active Template Library)を使うと比較的簡単に作成することができた。C++からは、WindowsのAPIや高速な処理が可能で、その機能が簡単にVisual BASICで使えるようになった。

COMという名称は1997年頃から使われ始める

 COMという名称が使われ始めたのは、1997年頃。さまざまに変わってきた名称を整理し、オブジェクト技術の総称として使われた。

 COMが提供するのは、実行時に独立した別のプログラムコードを呼び出すための仕組みである。しかし、これはなかなか難しい。というのは、最終的に実行される機械語命令では、実行するプログラムの開始アドレスが明確に定まっている必要があるからだ。たとえば、WordからExcelの機能を呼び出すには、メモリに置かれたExcelのプログラムコード開始アドレスを知らねばならないが、実行環境や状況などでメモリの利用状態が異なるため、実行開始アドレスが変わってしまい、一定のアドレスにすることができない。

 そこで機能の実行開始アドレスを一定の順番で並べた表(リスト)を作り、機能と表内の順番を対応させた。こうしたルールを定め、表の作成や呼び出しなどの仕組みを提供するのがCOMである。

 逆に言えば、COMを使うことで呼び出し元と呼び出し先を「分離」することができる。独立して開発が可能で、実行時までお互いのアドレスを知らなくてもいいからだ。DirectX系のAPIも呼び出しの仕組みに簡略化されたCOM(Nano-COMと呼ばれることがある)を使う。これは特に呼び出し元(ゲームなどのDirectX利用アプリケーション)と呼び出し先(DirectX)を分離させるために使われる。これにより、前世代のDirectX向けに作られたゲームが、新しいDirectXの下で動作できるようになる。

 COMを使ってコンポーネントを作成すれば、プログラムは実行時にコンポーネントの機能を利用できるようになる。システムにインストールされたコンポーネントを登録しているのがレジストリだ。レジストリは、COMのためだけに作られたわけではないが、COMにおいて重要な役割を果たす。レジストリ編集が危険といわれる理由のひとつは、コンポーネントの登録が行なわれているため、登録情報を書き換えてしまうと、アプリケーションやWindowsがクラッシュしてしまう可能性があるからだ。

 前回解説したプレビューハンドラもレジストリに登録されており、エクスプローラーはこれを見て、どんなプレビューハンドラが登録されているのかを知る。そのあとで必要な情報は、コンポーネント自身にたずねることで得られるようになっている。

 コンポーネントが持つ機能(処理)に対応するメソッドは、インターフェースと呼ばれる情報に格納されている。COMコンポーネントは、メモリに置かれ、実行可能な状態であるとき、自身が持つインターフェースを外部のプログラムに教えることができる。このとき、VTBLというアドレス表を使う。

メモリにロードされたコンポーネントの中にVTBLと呼ばれるテーブル(リスト)が作られ、ここに各メソッドの実行開始アドレスが書き込まれる。COMコンポーネントを呼び出すクライアント・アプリケーションはAPIを使い、VTBLへのポインタを入手。これを使ってメソッドを呼び出す

 VTBLは、メソッドの実行開始アドレスを並べたリストになっていて、COMコンポーネントには、このVTBLの場所(アドレス)を通知する関数が必ず用意されている。アドレス表の位置が機能を表わし、そこに書き込まれたアドレスが実際のプログラムの実行開始位置となる。コンポーネットは必ず、QueryInterface/AddRef/Releaseの3つのメソッドを持っており、これが先頭の3つになる。

 これにより、呼び出し側のプログラムは、現在の実行開始アドレスを知ることができる。もっともCOMでは、C++などの言語用にCOMの機能を使う、あるいはコンポーネントを作るためのライブラリが用意されており、こうした細かい仕組みにまで立ち入ることなく、コンポーネントの利用や作成ができるようになっている。

 ただし、コンポーネントを呼び出すときに必要になる引数などの情報に関しては、呼び出し元が理解している必要がある。たとえばプレビューハンドラには、実装すべきインターフェースが4つ定義されている。プレビューハンドラを作る場合には、このインターフェース(メソッド)を実行するプログラムを書かねばならない。

 WordにExcelの表を埋め込む用途には、複合ドキュメント用のインターフェースが定義されている。複合ドキュメントを実装するアプリケーション(Word)は、これを呼び出せるように作らねばならない。埋め込まれるオブジェクトを提供する側も、そのためにコンポーネントを登録しておく必要がある。複合ドキュメントが有効なアプリケーションでは、クリップボードやドラッグ&ドロップ経由で相手プログラム(コンポーネント)の情報を得て、オブジェクトのリンクや埋め込みを行なう。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事
1
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
¥39,800
2
【整備済み品】中古 ノートパソコン NEC VersaPro VKT16/15.6型・第8世代Core i5-8250U(最大動作3.4GHz)/快適メモリ8GB/ 高速SSD 256GB/Win11 Pro/MS Office 2019付属/テンキー付, Webカメラ, USB3.0, HDMI, VGA, 有線LAN, WIFI内蔵, Bluetooth/ACアダプター付属/180日間保証
【整備済み品】中古 ノートパソコン NEC VersaPro VKT16/15.6型・第8世代Core i5-8250U(最大動作3.4GHz)/快適メモリ8GB/ 高速SSD 256GB/Win11 Pro/MS Office 2019付属/テンキー付, Webカメラ, USB3.0, HDMI, VGA, 有線LAN, WIFI内蔵, Bluetooth/ACアダプター付属/180日間保証
¥26,880
3
【整備済み品】富士 通 2in1ノートパソコン V727【本体のみ】/第7世代Core M3/12.3型タッチパネル1920×1080/メモリ 8GB/SSD 128GB/Win 11/MS Office 2019/USB 3.1/Type-C/無線WIFI/オーディオ内蔵/WEBカメラ/初期設定済
【整備済み品】富士 通 2in1ノートパソコン V727【本体のみ】/第7世代Core M3/12.3型タッチパネル1920×1080/メモリ 8GB/SSD 128GB/Win 11/MS Office 2019/USB 3.1/Type-C/無線WIFI/オーディオ内蔵/WEBカメラ/初期設定済
¥9,600
4
Lenovo Chromebook クロームブック IdeaPad Flex 3i Gen8 12.2インチ インテル® プロセッサー N100搭載 メモリ4GB eMMC 64GB バッテリー駆動12.0時間 重量1.25kg アビスブルー 82XH001KJP
Lenovo Chromebook クロームブック IdeaPad Flex 3i Gen8 12.2インチ インテル® プロセッサー N100搭載 メモリ4GB eMMC 64GB バッテリー駆動12.0時間 重量1.25kg アビスブルー 82XH001KJP
¥29,800
5
【Amazon.co.jp限定】 ASUS ノートパソコン Vivobook 15 X1502VA 15.6インチ インテル Core i7 13620H メモリ16GB SSD 1TB Windows 11 バッテリー駆動 8.9時間 重量1.7kg PC Game Pass 3ヶ月利用権付き クワイエットブルー X1502VA-I7H161W
【Amazon.co.jp限定】 ASUS ノートパソコン Vivobook 15 X1502VA 15.6インチ インテル Core i7 13620H メモリ16GB SSD 1TB Windows 11 バッテリー駆動 8.9時間 重量1.7kg PC Game Pass 3ヶ月利用権付き クワイエットブルー X1502VA-I7H161W
¥104,800

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥1,880
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,390
3
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
¥1,880
4
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥660
5
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥980
6
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
¥5,280
7
Amazon Kindle Paperwhite (16GB) 7インチディスプレイ、色調調節ライト、12週間持続バッテリー、広告なし、ブラック
Amazon Kindle Paperwhite (16GB) 7インチディスプレイ、色調調節ライト、12週間持続バッテリー、広告なし、ブラック
¥18,980
8
バッファロー SDカード 128GB 100MB/s UHS-1 スピードクラス1 VideoSpeedClass10 IPX7 Full HD データ復旧サービス対応 RSDC-128U11HA/N
バッファロー SDカード 128GB 100MB/s UHS-1 スピードクラス1 VideoSpeedClass10 IPX7 Full HD データ復旧サービス対応 RSDC-128U11HA/N
¥2,000
9
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥5,545
10
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
¥652

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン