オートメーション - スクリプト言語への対応方法

いちごパック > COM/ActiveXの解説 > オートメーション - スクリプト言語への対応方法

オートメーションの仕組み

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の解説ページ 目次
  • 次の項目: クライアントの実装