MFC – Automation
津路です。
今回は、MFCのAutomationについて取り上げようと思います。
Automationとは何かというと、COMベースの技術で、アプリケーションのメソッドやプロパティを外出しにして、それを利用してアプリケーションを組めるようにする仕組みとでもいいましょうか。
外出しにする側をサーバー、利用する側をクライアントと呼びます。
サーバー側は、APIを外部から利用できるように、Automationサーバーとして作り、クライアント側では、VBスクリプトなどからAPIを呼び出したりできます。
VBだけでなく、C++でも作成できるし、利用もできます。
さて、Automationでは、サーバー側はオブジェクトとして扱い、ProgIDというIDが与えられます。
このオブジェクトは、IDispatchをインプリメントしたCOMオブジェクトです。
インタフェースは、4つあり、重要なのは、InvokeとGetIDsOfNamesです。
Invokeは、Automationのメソッドをコールし、プロパティにアクセスする機能です。
GetIdsOfNamesは、メソッドやプロパティのDispatch IDを返します。このIDを用いて、Invokeを呼び出します。
<タイプライブラリ>
何を指すかというと、サーバーのインタフェースとコンポーネントの情報を詰め込んだ、入れ物です。ファイルの拡張子は、tlbです。クライアントは、このファイルを通じて、サーバー側が外出ししている、インタフェース、メソッド、プロパティや引数の情報を得ます。
Automationサーバーを仕立てるには、VC++環境のAppWizard(かなり古いバージョン6ですが)では、プロジェクト作成手順の3で、Automationにチェックを入れます。
そのあとのステップで、詳細ボタンを押すと、オプションページを開き、タイプIDの欄に、上記で述べたProgIDを指定します。ここには、独自の名前をテキストで入力します。
プロパティやメソッドは、プロジェクト作成後、ClassWizardを開いて、Automationタブを開き、追加していきます。
ここで、注意があります。
Document/View形式のアプリケーションでは、Documentクラスにしか、メソッドなどを定義できません。
一方、ダイアログベースのプロジェクトでは、CCmdTargetから派生するProxyクラスにしか、定義できません。
次回は、サンプルサーバーを作ってみます。