大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

MFC – Automation

株式会社クローバーフィールドの経営理念
著者:津路高広
公開日:2020/07/06
最終更新日:2020/07/06
カテゴリー:技術情報
タグ:

津路です。

今回は、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クラスにしか、定義できません。

次回は、サンプルサーバーを作ってみます。

    上に戻る