mirror of
https://github.com/php/doc-ja.git
synced 2026-03-30 11:02:18 +02:00
git-svn-id: https://svn.php.net/repository/phpdoc/ja/trunk@200002 c90b9560-bf6c-de11-be94-00142212c4b1
237 lines
9.2 KiB
XML
237 lines
9.2 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision: 1.7 $ -->
|
|
<!-- EN-Revision: 1.11 Maintainer: hirokawa Status: ready -->
|
|
<!-- CREDITS: takagi -->
|
|
<!-- Purpose: utilspec.windows -->
|
|
<!-- Membership: bundled -->
|
|
|
|
<reference id="ref.com">
|
|
<title>COM と .Net (Windows)</title>
|
|
<titleabbrev>COM</titleabbrev>
|
|
<partintro>
|
|
<section id="com.intro">
|
|
&reftitle.intro;
|
|
<para>
|
|
COM は Component Object Model の略語であり、
|
|
DCE RPC (オープンスタンダード) の最上位のオブジェクト指向レイヤーです。
|
|
COM はコール手順を共通化し、あらゆる言語でコードを記述し、
|
|
(COM に対応した)他の言語で書かれたコードをコール、相互運用することを可能にします。
|
|
あらゆる言語で書くことを可能にするだけではなく、
|
|
同じ実行形式の一部となることすら不要です。
|
|
コードは、同じマシンで実行される他のプロセスのコードである DLL からロードしたり、
|
|
または、リモートマシン上の他のプロセスにあるコードを DCOM (分散 COM) で
|
|
利用することができます。
|
|
この場合、コードの中では、コンポーネントの存在する場所を意識する必要はありません。
|
|
</para>
|
|
<para>
|
|
OLE オートメーションと呼ばれる COM のサブセットがあります。
|
|
これは、COM オブジェクトに祖な結合を行うことができる COM インターフェイスを
|
|
提供します。これにより、コンパイル時にオブジェクトの動作を知ることなく、
|
|
実行時にコールを行うことができるようになります。
|
|
PHP COM 拡張モジュールは、OLE オートメーションを使用して
|
|
スクリプトから互換性のあるオブジェクトを作成/コールすることができます。
|
|
技術的に述べると、
|
|
全ての COM オブジェクトが OLE 互換であるというわけではないため、
|
|
実際には、この拡張モジュールは "PHP の OLE オートメーション
|
|
拡張モジュール" と呼ばれるべきものです。
|
|
</para>
|
|
<para>
|
|
ところで、なぜ COM を使用する必要があるのでしょう? COM は、
|
|
Windows 環境でアプリケーションとコンポーネントを結び付ける代表的な手法の一つで、
|
|
COM を使用して Microsoft Word を起動し、
|
|
ドキュメントテンプレートを埋めて、Word 文書として結果を保存し、Web サイトの
|
|
訪問者に送信することができます。
|
|
また COM を使用して、ネットワークの管理タスクを処理したり
|
|
IIS を設定したりすることができます。これらは最も一般的な使用法にすぎません。
|
|
COM でできることはまだまだたくさんあります。
|
|
</para>
|
|
<para>
|
|
PHP 5 以降、この拡張モジュール(とこの文書)は最初から書き直され、
|
|
古い紛らわしい部分は削除されました。さらに Microsoft により提供された
|
|
COM との相互運用レイヤーを用いて
|
|
.Net アセンブリのインスタンス化と生成をサポートしました。
|
|
</para>
|
|
<para>
|
|
PHP 5 におけるこの拡張モジュールの変更点の概要については、
|
|
<ulink url="&url.zend.comdotnet;">この文章</ulink>
|
|
を参照してください。
|
|
</para>
|
|
</section>
|
|
|
|
<section id="com.requirements">
|
|
&reftitle.required;
|
|
<para>
|
|
COM 関数は、Windows 版の PHP でのみ利用可能です。
|
|
</para>
|
|
<para>
|
|
.Net サポートは、PHP 5 と .Net ランタイムを必要とします。
|
|
</para>
|
|
</section>
|
|
|
|
<section id="com.installation">
|
|
&reftitle.install;
|
|
&no.install;
|
|
&windows.builtin;
|
|
<para>
|
|
あなたには、(MS Word のような)使用する様々な COM オブジェクトのインストールを正しく
|
|
行っておく責任があります。
|
|
PHP にこれら全てをバンドルすることはできません。
|
|
</para>
|
|
</section>
|
|
|
|
<section id="com.foreach">
|
|
<title>foreach</title>
|
|
|
|
<para>
|
|
PHP 5 以降、標準的な COM/OLE IEnumVariant の内容について
|
|
PHP の <xref linkend="control-structures.foreach"/> 命令を
|
|
使用し、反復処理を行うことができます。分かりやすく言うと、
|
|
これは、VB/ASP のコードで <literal>For Each</literal> を使用できる
|
|
場所には、foreach を使用できるということを意味します。
|
|
</para>
|
|
|
|
<para>
|
|
<example>
|
|
<title>ASP における For Each</title>
|
|
<programlisting role="asp">
|
|
<![CDATA[
|
|
<%
|
|
Set domainObject = GetObject("WinNT://Domain")
|
|
For Each obj in domainObject
|
|
Response.Write obj.Name & "<br />"
|
|
Next
|
|
%>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
|
|
<para>
|
|
<example>
|
|
<title>PHP 4 におけるwhile() ... Next()</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$domainObject = new COM("WinNT://Domain");
|
|
while ($obj = $domainObject->Next()) {
|
|
echo $obj->Name . "<br />";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
|
|
<para>
|
|
<example>
|
|
<title>PHP 5 における foreach</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$domainObject = new COM("WinNT://Domain");
|
|
foreach ($domainObject as $obj) {
|
|
echo $obj->Name . "<br />";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</section>
|
|
|
|
<section id="com.arrays">
|
|
<title>配列と配列形式の COM プロパティ</title>
|
|
|
|
<para>
|
|
多くの COM オブジェクトは、プロパティを配列で公開したり
|
|
配列形式を使用してアクセスできるようにしています。
|
|
PHP 4 では、PHP の配列構文を使用してこれらのプロパティに対する読み書きが
|
|
できますが、1 次元の配列のみがサポートされます。多次元のプロパティを
|
|
読み込みたい場合は、プロパティへのアクセスを関数コールに組み込んで
|
|
各パラメータを入れtうの各次元に対応させるという方法が可能ですが、
|
|
そのようなプロパティに対する書き込みの手段はありません。
|
|
</para>
|
|
|
|
<para>
|
|
PHP 5 では以下の新機能を用いることで多少ましになりました。
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
多次元配列・複数パラメータを要求する COM プロパティへの
|
|
PHP の配列構文を使用したアクセス。
|
|
書き込みやプロパティの設定にもこの技法が使用可能です。
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
<xref linkend="control-structures.foreach"/> 制御構造を使用した
|
|
SafeArrays ("真の" 配列) の値の取得。SafeArrays が自分自身の
|
|
サイズについての情報を含んでいることからこれが可能となります。
|
|
配列形式のプロパティが IEnumVariant を実装している場合は、その
|
|
プロパティに対しても foreach が使用可能です。この項目についての
|
|
詳細な情報は、<xref linkend="com.foreach"/> をごらんください。
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
</section>
|
|
|
|
<section id="com.exceptions">
|
|
<title>例外 (PHP 5)</title>
|
|
|
|
<para>
|
|
COM から致命的なエラーが報告された場合、この拡張モジュールは
|
|
<literal>com_exception</literal> クラスのインスタンスをスローします。
|
|
すべての COM 例外は <literal>code</literal> という定義済みの
|
|
プロパティを保持しており、これは COM 操作が返す HRESULT 値に対応します。
|
|
プログラム上での例外の処理方法を決定するために、この値を使用する
|
|
ことができます。
|
|
</para>
|
|
|
|
</section>
|
|
|
|
&reference.com.ini;
|
|
|
|
&reference.com.constants;
|
|
|
|
<section id="com.seealso">
|
|
&reftitle.seealso;
|
|
<para>
|
|
COM についてのより詳細な情報は <ulink url="&url.comspecs;">COM
|
|
仕様</ulink> を読むか、あるいは Don Box の
|
|
<ulink url="&url.yacl;">Yet Another COM Library (YACL)</ulink>
|
|
をごらんください。その他の有用な情報が、
|
|
<xref linkend="faq.com"/> の FAQ からも得られるでしょう。
|
|
MS Office アプリケーションをサーバサイドで使用しようと考えておられるなら、
|
|
<ulink
|
|
url="&url.msoffice.serverside;">Considerations for Server-Side Automation
|
|
of Office</ulink> の情報も読んでおくべきでしょう。
|
|
</para>
|
|
</section>
|
|
</partintro>
|
|
|
|
&reference.com.functions;
|
|
|
|
</reference>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../../../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
-->
|
|
|