オートメーション サーバー
オートメーションを使うと、アプリケーションから、他のアプリケーションに実装されているオブジェクトを操作したり、他のアプリケーションから操作できるように自分のオブジェクトを公開したりできます。 オートメーション サーバーは、プログラミング可能なオブジェクト (オートメーション オブジェクト) を他のアプリケーション (オートメーション クライアント) に公開するアプリケーションです。 オートメーション サーバーは、オートメーション コンポーネントと呼ばれることもあります。
オートメーション オブジェクトが公開されていることで、クライアントは、サーバーが提供するオブジェクトや機能に直接アクセスし、特定の作業を自動化できます。 このようにオブジェクトを公開することは、アプリケーションが他のアプリケーションにとって有益な機能を備えている場合に利便性を発揮します。 たとえばワード プロセッサのスペルチェック機能を、他のプログラムから使用できるように公開することが考えられます。 このように、オブジェクトが公開されていれば、ベンダーは自社のアプリケーションの機能を、他のアプリケーションの既製の機能を使って強化できます。
オートメーション オブジェクトは、その外部インターフェイスとしてプロパティとメソッドを備えています。 プロパティは、オートメーション オブジェクトの属性に名前が付いたものです。 プロパティは、C++ クラスのデータ メンバーに似ています。 メソッドは、オートメーション オブジェクトで動作する関数です。 メソッドは、C++ クラスのパブリック メンバー関数に似ています。
Note
プロパティは、C++ のデータ メンバーに似ていますが、直接アクセスすることはできません。 透過的にアクセスできるようにするには、それらにアクセスするための一対の get/set メンバー関数を含んだ内部変数をオートメーション オブジェクトに用意します。
適切に定義された共通のインターフェイスを介してアプリケーションの機能を公開することで、アプリケーションごとにばらばらなマクロ言語ではなく、Microsoft Visual Basic など、単一の汎用プログラミング言語でアプリケーションを構築できるようになります。
オートメーション サーバーのサポート
Visual C++ と MFC フレームワークは、オートメーション サーバーのサポートが充実しています。 オートメーション サーバーに伴うオーバーヘッドの大半を肩代わりしてくれるので、開発者は、アプリケーションの機能に注力することができます。
オートメーションのサポートに関してフレームワークの最も重要なメカニズムは、ディスパッチ マップ、つまり OLE のメソッドとプロパティを公開するうえで必要な宣言と呼び出しに展開される一連のマクロです。 一般的なディスパッチ マップの例を次に示します。
BEGIN_DISPATCH_MAP(CMyServerDoc, COleServerDoc)
DISP_PROPERTY(CMyServerDoc, "Msg", m_strMsg, VT_BSTR)
DISP_FUNCTION(CMyServerDoc, "SetDirty", SetDirty, VT_EMPTY, VTS_I4)
END_DISPATCH_MAP()
ディスパッチ マップのメンテナンスには、クラス ウィザードとクラス ビューを活用できます。 新しいメソッドまたはプロパティをクラスに追加すると、Visual Studio によって対応する DISP_FUNCTION
または DISP_PROPERTY
マクロが、クラス名、メソッドとプロパティの外部名と内部名、そしてデータ型を示すパラメーターと共に追加されます。
また、オートメーション クラスの宣言とそのプロパティおよび操作の管理も、[クラスの追加] ダイアログ ボックスで簡単に行うことができます。 [クラスの追加] ダイアログ ボックスを使用してクラスをプロジェクトに追加するときに、その基底クラスを指定します。 基底クラスがオートメーションに対応している場合、新しいクラスでオートメーションをサポートするかどうかと、そのクラスが "OLE 作成可能" かどうか (つまり、COM クライアントからの要求でそのクラスのオブジェクトを作成できるかどうか)、また、使用する COM クライアントの外部名を指定するコントロールが [クラスの追加] ダイアログ ボックスに表示されます。
すると、指定した OLE 機能の適切なマクロを含むクラスの宣言が、[クラスの追加] ダイアログ ボックスによって作成されます。 また、クラスのメンバー関数を実装するためのスケルトン コードも追加されます。
オートメーション サーバー アプリケーションを作成するために必要な手順は、MFC アプリケーション ウィザードによって省力化されます。 [高度な機能] ページの [オートメーション] チェック ボックスをオンにすると、オートメーション オブジェクトを登録したりアプリケーションをオートメーション サーバーとして実行したりするために必要な呼び出しが、アプリケーションの InitInstance
関数に自動的に追加されます。