研究紹介
COMの構成要件とその設計方法について
システム応用技術部門 中西廣喜
昨年度はVisual Studio開発ツールにある各種のWizard、特にATL COM AppWizardを使ってCOMのプログラミングを試みたが、今回はVisual C++言語ではどのようにCOMが設計され、COM特有のプログラム・アーキテクチャなどが構築されているのかを、まずデバッガーを起動させ、アセンブラ言語レベルで検討した。特にC言語体系にはなくC++言語体系にあるクラス(class)や仮想関数の概念を中心に吟味した。その結果、C++言語によるクラスが仮想関数を有するときはC++コンパイラはそのC++クラス内の全ての仮想関数(基本クラスの中で宣言されている関数も含める)へのポインタを全て含むテーブル(仮想関数テーブル)とその仮想関数テーブルを指し示す仮想関数テーブルへのポインタとをコード領域やあるいはメモリ領域に作成していることが解る。そこで、C言語にもある構造体の機能を使って、仮想関数テーブルと仮想関数テーブルへのポインタやクラスメンバを含むオブジェクトを宣言する。この場合にobjbase.hあるいはbasetyps.hファイルには、C++言語からC言語でのプログラム作成が簡単に移行できるようにするマクロが定義されているので、実際にはこのマクロを使ってインターフェース(interface)を定義した。このような手法によりC言語のみによるCOMコンポーネントのプログラミングを行った。併せてC言語のみでCOMコンポーネントを利用するCOMクライアントを設計し、クライアント側でのC言語のみによるプログラミング手法も併せて検討した。
さらにこの研究では、COMとは何かとかCOMの構成要件とは何かなど、さらに一歩深く掘り下げた概念でCOMについて検討し、COMがパソコンの動作・性能・仕様などに深く関与としてることを検証し、今後のWindows上でのアプリケーション・プログラムの開発に寄与することに努めた。また、併せて各種COMコンポーネントの有効利用を図る手法を確立し、各種の開発言語で作成したCOMコンポーネントやそれを利用するクライアント・プログラムの設計手法を検討した。なお、レジストに関する知識不足が原因で、COMコンポーネントをレジストリにプログラム上で登録したり、削除するようにできなかったのは誠に残念である。