オートメーションの仕組み
IUnknownを継承したCOMインターフェースは、
CやC++であればコンパイラの機能を利用して直接呼び出せます。
しかしスクリプト言語では、これらを直接呼び出すコードは書くことは簡単ではありません。
そこでスクリプト言語からインターフェースを簡単に呼び出せるように、
COMはオートメーションという機能を提供しています。
オートメーションではほぼどんなメソッドでも呼び出せるメソッドを用意し、
実際のメソッド呼び出しはCOMサーバ側で行うようにしています。
オートメーションでは、COMサーバはIDispatchと呼ばれるインターフェースを実装します。
COMクライアントは、次の手順でメソッド呼び出しを行います。
COMクライアントは、IDispatchのGetIDsOfNames()メソッドによりメソッド名を識別用の数値(ID)に変換しておく。
COMクライアントは、呼び出したいメソッドのIDとその引数をIDispatchのInvoke()メソッドに渡すことでメソッドを呼び出す。
COMサーバは、Invoke()メソッドに渡されたIDと引数を利用して、メソッドの実装を呼び出す。
オートメーションの仕組みを使うことで、
スクリプト言語はGetIDsOfNames()メソッドとInvoke()メソッドのみを呼び出せばCOMクライアントとして機能します。
ここでは扱いませんが、スクリプト言語でオートメーションに必要なインターフェースを実装すれば、
COMサーバとして機能させることも可能です。
ProgID
今まで説明してきたように、COMサーバの提供するcoclassはCLSIDにより識別できます。
しかしながら、特にスクリプト言語では、{227A0711-D089-42AA-8428-52DD48A14139}といったCLSIDよりも、文字列を利用したい場合もあります。
そこでCOMでは、CLSIDに変換できる文字列としてProgIDを用意しています。
この機能は、ProgIDとCLSIDの対応をレジストリに登録しておくことで利用できます。
関連ページ
COM/ActiveXの解説ページ 目次
次の項目: クライアントの実装