オートメーション (旧称 OLE オートメーション) を使用すると、あるアプリケーションが別のアプリケーションに実装されているオブジェクトを操作したり、オブジェクトを公開して操作したりできます。
Automation サーバーは、COM インターフェイスを介して他のアプリケーション (オートメーション クライアントと呼ばれる) にその機能を公開するアプリケーション (COM サーバーの一種) です。 この公開により、Automation クライアントは、オブジェクトに直接アクセスし、提供するサービスを使用して、特定の機能を自動化できます。
オートメーション サーバーとクライアントは、常に IDispatch
から派生し、Automation 型と呼ばれる特定のデータ型のセットを取得して返す COM インターフェイスを使用します。 オートメーション インターフェイスを公開する任意のオブジェクトを自動化し、他のアプリケーションからアクセスできるメソッドとプロパティを提供できます。 オートメーションは、OLE オブジェクトと COM オブジェクトの両方で使用できます。 自動化されたオブジェクトは、ローカルまたはリモート (ネットワーク経由でアクセス可能な別のマシン上) である可能性があります。そのため、自動化には次の 2 つのカテゴリがあります。
オートメーション (ローカル)。
リモートオートメーション (ネットワーク経由、分散 COM または DCOM を使用)。
オブジェクトの公開は、アプリケーションが他のアプリケーションに役立つ機能を提供する場合に役立ちます。 たとえば、ActiveX コントロールは Automation サーバーの一種です。ActiveX コントロールをホストするアプリケーションは、そのコントロールのオートメーション クライアントです。
別の例として、ワード プロセッサはスペル チェック機能を他のプログラムに公開する場合があります。 オブジェクトの公開により、ベンダーは他のアプリケーションの既製の機能を使用してアプリケーションを改善できます。 このように、オートメーションは、再利用性やカプセル化など、オブジェクト指向プログラミングの原則の一部をアプリケーション自体のレベルで適用します。
さらに重要なのは、Automation がユーザーとソリューション プロバイダーに提供するサポートです。 オートメーションは、共通の明確に定義されたインターフェイスを介してアプリケーション機能を公開することで、さまざまなアプリケーション固有のマクロ言語ではなく、Microsoft Visual Basic などの単一の一般的なプログラミング言語で包括的なソリューションを構築することを可能にします。
Microsoft Excel や Microsoft Visual C++ などの多くの商用アプリケーションでは、それらの機能の多くを自動化できます。 たとえば、Visual C++ では、ビルド、コード編集の側面、またはデバッグ タスクを自動化する VBScript マクロを記述できます。
オートメーションでパラメーターを渡す
Automation メソッドを作成する場合の 1 つの難しさは、オートメーション サーバーとクライアントの間でデータを渡す統一された "安全な" メカニズムを提供することです。 オートメーションでは、 VARIANT 型を使用してデータを渡します。
VARIANT 型は、タグ付き共用体です。 値のデータ メンバー (これは匿名の C++ 共用体) と、共用体に格納されている情報の種類を示すデータ メンバーがあります。
VARIANT 型では、2 バイトと 4 バイトの整数、4 バイトと 8 バイトの浮動小数点数、文字列、ブール値など、さまざまな標準データ型がサポートされています。 さらに、 HRESULT (OLE エラー コード)、 CURRENCY (固定小数点数値型)、 DATE (絶対日付と時刻) 型、および IUnknown
インターフェイスと IDispatch
インターフェイスへのポインターもサポートしています。
VARIANT 型は COleVariant クラスにカプセル化されます。 サポートする CURRENCY クラスと DATE クラスは、 COleCurrency クラスと COleDateTime クラスにカプセル化されます。
Automation のサンプル
AUTOCLIK このサンプルを使用して、オートメーションの手法を学習し、リモート オートメーションを学習するための基礎として使用します。
ACDUAL Automation サーバー アプリケーションにデュアル インターフェイスを追加します。
CALCDRIV MFCCALC を駆動するオートメーション クライアント アプリケーション。
INPROC In-Process Automation サーバー アプリケーションを示します。
IPDRIVE INPROC を駆動するオートメーション クライアント アプリケーション。
MFCCALC Automation クライアント アプリケーションを示します。