このページの本文へ

前へ 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 MU937 超軽量 薄型ノートPC■Win11搭載 / MS Office H&B 2019 / FHD(1920x1080)/第七世代 Celeron/8GBメモリ/SSD 256GB/Webカメラ内蔵/13.3インチ
【整備済み品】 富士通 ノートパソコン LIFEBOOK MU937 超軽量 薄型ノートPC■Win11搭載 / MS Office H&B 2019 / FHD(1920x1080)/第七世代 Celeron/8GBメモリ/SSD 256GB/Webカメラ内蔵/13.3インチ
¥19,800
2
Lenovo ノートパソコン パソコン IdeaPad Slim 3 14.0インチ 第13世代 インテル® Core™ i5 プロセッサー搭載 13420H メモリ16GB SSD512GB MS Office 2024搭載 Windows11 バッテリー駆動14.1時間 重量1.39kg ルナグレー 83K00072JP ノートPC
Lenovo ノートパソコン パソコン IdeaPad Slim 3 14.0インチ 第13世代 インテル® Core™ i5 プロセッサー搭載 13420H メモリ16GB SSD512GB MS Office 2024搭載 Windows11 バッテリー駆動14.1時間 重量1.39kg ルナグレー 83K00072JP ノートPC
¥107,800
3
【整備済み品】中古 ノートパソコン 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
4
【整備済み品】富士通 ノートパソコン 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)
¥36,979
5
HP ノートパソコン 15-fd 15.6インチ インテル Core Ultra 5 125H メモリ16GB SSD512GB Windows 11 Microsoft Office 2024搭載 WPS Office搭載 カメラシャッター 指紋認証 薄型 Copilotキー搭載 ナチュラルシルバー (BJ0M7PA-AAAF)
HP ノートパソコン 15-fd 15.6インチ インテル Core Ultra 5 125H メモリ16GB SSD512GB Windows 11 Microsoft Office 2024搭載 WPS Office搭載 カメラシャッター 指紋認証 薄型 Copilotキー搭載 ナチュラルシルバー (BJ0M7PA-AAAF)
¥134,377

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,890
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
¥980
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 ホワイト
¥740
5
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
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
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥980
8
キヤノン 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
9
バッファロー 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
¥1,980
10
バッファロー USBメモリ 32GB USB3.2(Gen1)/3.1(Gen 1)/3.0/2.0 充実サポート RUF3-K32GA-BK/N
バッファロー USBメモリ 32GB USB3.2(Gen1)/3.1(Gen 1)/3.0/2.0 充実サポート RUF3-K32GA-BK/N
¥880

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

デジタル用語辞典

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