COM と .Net (Windows)
COM
&reftitle.intro;
COM は Component Object Model の略語であり、
DCE RPC (オープンスタンダード) の最上位のオブジェクト指向レイヤーです。
COM はコール手順を共通化し、あらゆる言語でコードを記述し、
(COM に対応した)他の言語で書かれたコードをコール、相互運用することを可能にします。
あらゆる言語で書くことを可能にするだけではなく、
同じ実行形式の一部となることすら不要です。
コードは、同じマシンで実行される他のプロセスのコードである DLL からロードしたり、
または、リモートマシン上の他のプロセスにあるコードを DCOM (分散 COM) で
利用することができます。
この場合、コードの中では、コンポーネントの存在する場所を意識する必要はありません。
OLE オートメーションと呼ばれる COM のサブセットがあります。
これは、COM オブジェクトに祖な結合を行うことができる COM インターフェイスを
提供します。これにより、コンパイル時にオブジェクトの動作を知ることなく、
実行時にコールを行うことができるようになります。
PHP COM 拡張モジュールは、OLE オートメーションを使用して
スクリプトから互換性のあるオブジェクトを作成/コールすることができます。
技術的に述べると、
全ての COM オブジェクトが OLE 互換であるというわけではないため、
実際には、この拡張モジュールは "PHP の OLE オートメーション
拡張モジュール" と呼ばれるべきものです。
ところで、なぜ COM を使用する必要があるのでしょう? COM は、
Windows 環境でアプリケーションとコンポーネントを結び付ける代表的な手法の一つで、
COM を使用して Microsoft Word を起動し、
ドキュメントテンプレートを埋めて、Word 文書として結果を保存し、Web サイトの
訪問者に送信することができます。
また COM を使用して、ネットワークの管理タスクを処理したり
IIS を設定したりすることができます。これらは最も一般的な使用法にすぎません。
COM でできることはまだまだたくさんあります。
PHP 5 以降、この拡張モジュール(とこの文書)は最初から書き直され、
古い紛らわしい部分は削除されました。さらに Microsoft により提供された
COM との相互運用レイヤーを用いて
.Net アセンブリのインスタンス化と生成をサポートしました。
PHP 5 におけるこの拡張モジュールの変更点の概要については、
この文章
を参照してください。
&reftitle.required;
COM 関数は、Windows 版の PHP でのみ利用可能です。
.Net サポートは、PHP 5 と .Net ランタイムを必要とします。
&reftitle.install;
&no.install;
&windows.builtin;
あなたには、(MS Word のような)使用する様々な COM オブジェクトのインストールを正しく
行っておく責任があります。
PHP にこれら全てをバンドルすることはできません。
foreach
PHP 5 以降、標準的な COM/OLE IEnumVariant の内容について
PHP の 命令を
使用し、反復処理を行うことができます。分かりやすく言うと、
これは、VB/ASP のコードで For Each を使用できる
場所には、foreach を使用できるということを意味します。
ASP における For Each
"
Next
%>
]]>
PHP 4 におけるwhile() ... Next()
Next()) {
echo $obj->Name . "
";
}
?>
]]>
PHP 5 における foreach
Name . "
";
}
?>
]]>
配列と配列形式の COM プロパティ
多くの COM オブジェクトは、プロパティを配列で公開したり
配列形式を使用してアクセスできるようにしています。
PHP 4 では、PHP の配列構文を使用してこれらのプロパティに対する読み書きが
できますが、1 次元の配列のみがサポートされます。多次元のプロパティを
読み込みたい場合は、プロパティへのアクセスを関数コールに組み込んで
各パラメータを入れtうの各次元に対応させるという方法が可能ですが、
そのようなプロパティに対する書き込みの手段はありません。
PHP 5 では以下の新機能を用いることで多少ましになりました。
多次元配列・複数パラメータを要求する COM プロパティへの
PHP の配列構文を使用したアクセス。
書き込みやプロパティの設定にもこの技法が使用可能です。
制御構造を使用した
SafeArrays ("真の" 配列) の値の取得。SafeArrays が自分自身の
サイズについての情報を含んでいることからこれが可能となります。
配列形式のプロパティが IEnumVariant を実装している場合は、その
プロパティに対しても foreach が使用可能です。この項目についての
詳細な情報は、 をごらんください。
例外 (PHP 5)
COM から致命的なエラーが報告された場合、この拡張モジュールは
com_exception クラスのインスタンスをスローします。
すべての COM 例外は code という定義済みの
プロパティを保持しており、これは COM 操作が返す HRESULT 値に対応します。
プログラム上での例外の処理方法を決定するために、この値を使用する
ことができます。
&reference.com.ini;
&reference.com.constants;
&reftitle.seealso;
COM についてのより詳細な情報は COM
仕様 を読むか、あるいは Don Box の
Yet Another COM Library (YACL)
をごらんください。その他の有用な情報が、
の FAQ からも得られるでしょう。
MS Office アプリケーションをサーバサイドで使用しようと考えておられるなら、
Considerations for Server-Side Automation
of Office の情報も読んでおくべきでしょう。
&reference.com.functions;