PHPはWin32プラットフォーム上でCOMとDCOMオブジェクトにアクセスすることがで
きます。
もしそれが普通のDLLなら、現在のところPHPからそれを実行する手段は
ありません。DLLがCOMサーバを含んでいてIDispatchインターフェース
が実装されている場合、PHPからアクセスすることができます。
多くのVARIANTタイプとその組み合わせがあり、そのほとんどはサポー
トされていますが、残りのいくつかは未だ実装されていません。また配
列も完全にサポートされているわけではなく、PHPとCOMの間で受け渡し
が可能なのは1次元の添字付配列のみです。もしこの他にサポートされ
ていないタイプを見つけた場合は(既知でなければ)、できる限りの情報 を添えてバグとして報告して下さい。
基本的には可能です。しかしPHPはほとんどの場合ウェブスクリプティ
ングの言語として使用されウェブサーバ上で実行されるため、ビジュア
ルオブジェクトがサーバのデスクトップに現れることはありません。も
しPHPをアプリケーション作成に使用する、すなわちPHP-GTKと合わせて
使用する場合にはアクセスに制限はありません。COMを通じてビジュア
ルオブジェクトを操作することができます。
現在の所、PHPが提供する方法(@, track_errors,
...)を使用してCOMの エラーをトラップすることはできません。しかし、私たちはこれを実装
する方法を検討中です。
7.
'Unable to obtain IDispatch interface for CLSID
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'とはどういう意味ですか?
このエラーが発生する理由はいくつかあります:
CLSIDが正しくない
要求されたDLLが無い
要求されたコンポーネントがIDispatchインターフェースを実装していない
ローカルオブジェクトを実行するのと全く同様です。ただ、COMコンス
トラクタの2番目のパラメータにリモートマシンのIPアドレスを渡すだ けです。
php.ini
に
com.allow_dcom=true
をセットするのを忘れないで ください。
php.ini
を編集して
com.allow_dcom=true
として下さい。
これははPHPとは関係ありません。ActiveXオブジェクトは、HTMLドキュ
メントから要求があった場合にクライアント側でロードされます。PHP
スクリプトとは関係が無く、従ってサーバ側と直接やりとりすることも できません。
モニカーを使用すれば可能です。同じWordインスタンスに対して複数の
参照を取得したい場合は、以下のようにしてインスタンスを生成します:
$word = new COM("C:\docs\word.doc"); |
こうすれば、実行中のインスタンスが無い、もしくはインスタンスの取
得が不可能だった場合には新規に生成され、インスタンスが取得できた 場合はにはそのハンドルを返します。
この問題に対する答えは、簡単ですが残念なものです。正確にはわかり
ませんが、おそらく打つ手はありません。もしこの問題に関する具体的 な情報があったら
私
に教えて下さい。
COM+とはMTS(Microsoft Transaction
Server)とMSMQ(Microsfot Message Queue
Service)を通じてコンポーネントを操作するフレームワー
クによってCOMを拡張したものです。が、PHPがそういったコンポーネン
トをサポートするにあたって特別に必要なことは特にありません。