Microsoft Windowsアプリケーション プログラミングにおいて、 OLE オートメーション(後にオートメーションに改名[1] [2] ) は、Microsoftが作成したプロセス間通信メカニズムです。これは、スクリプト言語(当初は Visual Basic)で使用することを意図したコンポーネント オブジェクト モデル(COM) のサブセットに基づいていますが、現在では Windows 上のいくつかの言語で使用されています。すべてのオートメーション オブジェクトは、IDispatchインターフェイスを実装する必要があります。これは、オートメーション コントローラーと呼ばれるアプリケーションが、他のアプリケーションによってエクスポートされた共有オートメーション オブジェクトにアクセスして操作 (つまり、プロパティの設定やメソッドの呼び出し) できるインフラストラクチャを提供します。これは、アプリケーションが互いに制御するための古いメカニズムであるDynamic Data Exchange (DDE) に取って代わります。 [3] DDE と同様に、OLE オートメーションでは、オートメーション コントローラーが「クライアント」で、オートメーション オブジェクトをエクスポートするアプリケーションが「サーバー」です。
名前に反して、オートメーション オブジェクトは必ずしも Microsoft OLE を使用するわけではありませんが、一部のオートメーション オブジェクトは OLE 環境で使用できます。この混乱の原因は、Microsoft の以前の OLE の定義にあります。OLE は以前は COM とほぼ同義でした。
利点と限界
相互運用性を確保するために、オートメーションインターフェースはすべてのCOMタイプのサブセットを使用するように制限されています。[4] [5]具体的には、オートメーションインターフェースは生のCOM配列の代わりにSAFEARRAYを使用する必要があります。
ただし、オートメーション互換の COM サーバーは、組み込みの OLE マーシャリング実装に依存できます。[6]これにより、アウトオブプロセスのマーシャリング用の追加のプロキシ/スタブ プロジェクトが不要になります。
使用法
オートメーションはスクリプトの容易さを考慮して設計されているため、コントローラは多くの場合、エンドユーザーにVisual Basic for Applicationsなどの言語を提供し、スクリプトを介してオートメーションオブジェクトを制御できるようにしています。オートメーションオブジェクトは、 C++などの従来の言語で記述されることが多く、[7] C++属性を使用して開発を簡素化できます。[8] Visual BasicやBorland Delphiなどの言語は、基盤となる実装の複雑さを隠すオートメーション用の便利な構文も提供しています。
タイプライブラリ
アプリケーションを自動化するには、オートメーション コントローラの開発者は、アクティベーション オブジェクトをエクスポートする対象アプリケーションで使用されているオブジェクト モデルを知っている必要があります。 [9]そのためには、対象アプリケーションの開発者がオブジェクト モデルを公開する必要があります。対象アプリケーションのオブジェクト モデルの知識がないと、オートメーション コントローラの開発は「困難または不可能」です。[10]
このような複雑さのため、オートメーション コンポーネントには通常、オブジェクト ライブラリによって公開されるクラス、インターフェイス、およびその他の機能に関するメタデータを含むタイプ ライブラリが付属しています。インターフェイスは、 Microsoft インターフェイス定義言語で記述されます。タイプ ライブラリは、Microsoft OLE/COM オブジェクト ビューアー ( 、 Microsoft プラットフォーム SDKの一部) や Visual Basic (バージョン 6 まで) およびVisual Studio .NETのオブジェクト ブラウザーなど、さまざまなツールを使用して表示できます。タイプ ライブラリは、COM とMicrosoft .NETやJavaなどの他のプラットフォームとの相互運用のためのプロキシ パターン/スタブコードを生成するために使用されます。たとえば、.NET Framework SDK には、プロキシ .NET DLL を生成して Automation オブジェクトにアクセスするためのツールが含まれています。このプロキシ .NET DLL は、事前バインディング (タイプ ライブラリから抽出されたインターフェイスに関する情報を使用) と遅延バインディング (IDispatch 経由、.NET Reflection API にマップ) の両方を使用しており、COM Interop [11]と呼ばれる組み込みの .NET から COM へのブリッジを備えています。Javaには組み込みの COM サポートがありませんが、JACOB [12]や jSegue [13]などのツールセットは、タイプ ライブラリからプロキシ ソース コード (Java クラスのセットとJava Native Interface DLL のC++ソースの 2 つの部分で構成) を生成できます。これらのソリューションは Windows でのみ機能します。別の Java ベースの j-Interop [14]ライブラリは、DCOM ワイヤ プロトコル (MSRPC) を使用してJNIなしで COM コンポーネントとの相互運用性を実現し、Windows 以外のプラットフォームでも機能します。
oleview.exe
マイクロソフトはMicrosoft Officeのすべてのアプリケーションのオブジェクトモデルを公開しており、[15]他のソフトウェア開発者もアプリケーションのオブジェクトモデルを文書化しています。オブジェクトモデルはオートメーションコントローラにタイプライブラリとして提示され、そのインターフェイスはODLで記述されています。
言語サポート
自動化は、以下の言語を含むさまざまな言語で利用できます。
- ABAP
- C
- C++(コンパイラCOMサポート付き、[16]またはMFCやATLなどのライブラリ付き)
- C#
- Visual BasicおよびVisual Basic for Applications
- ビジュアルフォックスプロ
- dBASE (OleAutoClient クラス経由)
- デルファイ[17]
- Microsoft .NET言語[11]
- APL (ほとんどの Windows バージョン)
- Java (サードパーティツールのみ)
- JScript [9]とVBScript
- オープンオブジェクトRexx [18]
- パール[19]
- PHP [20]
- パワービルダー
- パイソン[21] [22]
- Ruby (標準の Ruby 1.8.x 以降のディストリビューションに含まれる 'win32ole' ライブラリ経由)
- Tcl [23]
- ビジュアルデータフレックス
- ウィンバッチ[24]
参照
- アクティブX
- アクティブ スクリプト
- オブジェクトのリンクと埋め込み(OLE)
- コンポーネント オブジェクト モデル(COM)
参考文献
- ^ Microsoft Corporation (2021 年 8 月 3 日). 「オートメーション (MFC)」. MSDN .
- ^ KruJ.; Wingo, Scott; Shepherd, George (1998). 「第 25 章: オートメーション」。 プログラミングMicrosoft Visual C++ 6.0 (第 5 版)。ワシントン州レドモンド: Microsoft Press。ISBN 978-1-57231-857-1。
- ^ Gordon McComb (1997). 「OLE オートメーションを使用した WordPerfect の制御」。2017 年 8 月 15 日時点のオリジナルよりアーカイブ。2006 年 7 月 20 日閲覧。— McCombは、DDEの代わりにOLEオートメーションを使用してWordPerfectを制御する方法について説明します。
- ^ Microsoft MSDN: oleautomation 属性
- ^ Microsoft MSDN: オートメーション互換型
- ^ Microsoft MSDN: マーシャリングの詳細 (COM) タイプ ライブラリ マーシャリング コミュニティの追加
- ^ Chris Oakley. 「C++ プログラマーのための OLE オートメーション」
- ^ MSDN マガジン: C++ 属性: Visual Studio .NET の新機能で COM プログラミングが簡単に
- ^ ab Yehuda Shiran および Tomer Shiran。「JavaScript での OLE オートメーション」。WebReference。— タイトルにもかかわらず、この記事ではJavaScriptではなくJScriptについて説明しています
- ^ Bruce Armstrong (2006-01-16). 「OLE — PowerBuilder の機能拡張 (パート 2)」. PowerBuilder Developers' Journal . 12 (11). 2008-02-19 にオリジナルからアーカイブ。2006-07-21に取得。
- ^ ab Appleman, Dan ( 2001)。「第 15 章: COM 相互運用性と Win32 API へのアクセス」。VB.NET への移行: 戦略、概念、コード。Apress。ISBN 978-1-893115-97-2。
- ^ 「JACOB プロジェクト」 2004 年 10 月 17 日。
- ^ 「jSegue」 2005年12月14日。
- ^ 「j-Interop Java COM interoperability from any platform」。2009-02-01 のオリジナルからアーカイブ。2013-12-20に取得。
- ^ 「Office オブジェクト モデル ドキュメントの検索と使用方法」。ナレッジベース。Microsoft Corporation。
- ^ 「コンパイラ COM サポート」。MSDN。Microsoft。2021年 8 月 3 日。
- ^ 「Delphi を使用した OLE オートメーション」。About.com。2005年 11 月 9 日のオリジナルからアーカイブ。2006 年 7 月 26 日閲覧。
- ^ 「Open Object Rexx」。
- ^ Jan Dubois ( 1998年夏)。「Win32::OLE」。Perl Journal。3 (2)。
- ^ PHP グループ (2006-07-25)。「PHP: COM と .Net (Windows)」。
- ^ Mark Hammond. 「Windows 用 Python 拡張機能」。
- ^ Sourceforge. 「Comtypes Python パッケージ」。
- ^ Tcl プログラマー。「Tcl の観点から見た OLE」。
- ^ Stan Littlefield. 「OLE チュートリアル WINBATCH OLE プログラミング」.
さらに読む
- Microsoft Corporation (1993 年 12 月)。OLE 2 プログラマーズ リファレンス: OLE オートメーション v. 2 を使用したプログラム可能なアプリケーションの作成。プログラマーズ リファレンス ライブラリ。Microsoft Press。ISBN 978-1-55615-629-8。
- クレイグ・ブロックシュミット (1995)。OLE 内。マイクロソフトプレス。
- Microsoft Corporation (1996)。OLEオートメーション プログラマーズ リファレンス。プログラマーズ リファレンス ライブラリ。Microsoft Press。ISBN 978-1-55615-851-3。
- Microsoft Corporation (1999)。Microsoft Office 2000 Visual Basic for Applications言語リファレンス。Microsoft Press。ISBN 978-1-57231-955-4。— Microsoft Office のオブジェクト モデルの完全な印刷ドキュメント
外部リンク
- OLE オートメーション OLE の実装の概要と問題についての一般的な論文。
- 「VOLE - 優れた C++ COM/オートメーション ドライバー」 - IDispatch を直接駆動する必要がある場合に使用する、オープン ソースでコンパイラに依存しない C++ COM オートメーション ドライバー ライブラリです。VOLE は非常に堅牢で、IDispatch のすべての「低レベル」の側面を完全にカプセル化しており、非常に柔軟で、通常の C++ 型を取得して返します。
