-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy pathcom.xml
More file actions
301 lines (283 loc) · 10.2 KB
/
com.xml
File metadata and controls
301 lines (283 loc) · 10.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: e0352653179c355a6b9c353629147b06a2069f24 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi -->
<chapter xml:id="faq.com" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>PHP と COM</title>
<titleabbrev>PHP と COM</titleabbrev>
<para>
PHP は Win32 プラットフォーム上で COM と DCOM オブジェクトに
アクセスすることができます。
</para>
<qandaset>
<qandaentry xml:id="faq.com.q1">
<question>
<para>
とある計算を行う DLL を作成しました。これを PHP で実行させる方法は
ありますか?
</para>
</question>
<answer>
<para>
もしそれが普通の DLL なら、現在のところ PHP からそれを実行する手段は
ありません。DLL が COM サーバーを含んでいて IDispatch インターフェイスが
実装されている場合、PHP からアクセスすることができます。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q2">
<question>
<para>
'Unsupported variant type: xxxx (0xxxxx)'とはどういう意味ですか?
</para>
</question>
<answer>
<para>
多くの VARIANT タイプとその組み合わせがあり、そのほとんどは
サポートされていますが、残りのいくつかは未だ実装されていません。
また配列も完全にサポートされているわけではなく、PHP と COM の間で
受け渡しが可能なのは 1 次元の添字付配列のみです。もしこの他に
サポートされていないタイプを見つけた場合は(既知でなければ)、
できる限りの情報を添えてバグとして報告してください。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q3">
<question>
<para>PHP でビジュアルオブジェクトを操作できますか?</para>
</question>
<answer>
<para>
基本的には可能です。しかし PHP はほとんどの場合ウェブスクリプティングの
言語として使用されウェブサーバー上で実行されるため、ビジュアルオブジェクトが
サーバーのデスクトップに現れることはありません。もし PHP を
アプリケーション作成に使用する、すなわち PHP-GTK と合わせて
使用する場合にはアクセスに制限はありません。COM を通じて
ビジュアルオブジェクトを操作することができます。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q4">
<question>
<para>COM オブジェクトをセッション情報として保存できますか?</para>
</question>
<answer>
<para>
できません。COM インスタンスはリソースとして扱われるため、1 つの
スクリプトを実行している間のみ使用可能です。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q5">
<question>
<para>COM の出力するエラーをトラップできますか?</para>
</question>
<answer>
<para>
COM 拡張モジュールは <literal>com_exception</literal>
例外をスローします。これをキャッチし、<literal>code</literal>
メンバを調べることで次にすべきことを決定できます。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q6">
<question>
<para>
PHP スクリプトから DLL を作成することはできますか? Perl では
できるのですが。
</para>
</question>
<answer>
<para>
いいえ、残念ながら PHP にはそのようなツールはありません。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q7">
<question>
<para>
'Unable to obtain IDispatch interface for CLSID
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'とはどういう意味ですか?
</para>
</question>
<answer>
<para>
このエラーが発生する理由はいくつかあります。
<itemizedlist>
<listitem>
<simpara>
CLSID が正しくない
</simpara>
</listitem>
<listitem>
<simpara>
要求された DLL が無い
</simpara>
</listitem>
<listitem>
<simpara>
要求されたコンポーネントが IDispatch インターフェイスを実装していない
</simpara>
</listitem>
</itemizedlist>
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q8">
<question>
<para>
COM オブジェクトをリモートサーバーから実行するにはどうすればよいですか?
</para>
</question>
<answer>
<para>
ローカルオブジェクトを実行するのと全く同様です。ただ、COM
コンストラクタの 2 番目のパラメータにリモートマシンの IP アドレスを
渡すだけです。
</para>
<para>
&php.ini; に
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true;
をセットするのを忘れないでください。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q9">
<question>
<para>
'DCOM is disabled in C:\path...\scriptname.php on line 6' という
エラーが発生しました。どうすればよいですか?
</para>
</question>
<answer>
<para>
&php.ini; を編集して
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true;.
としてください。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q10">
<question>
<para>
PHP を使用したページで ActiveX オブジェクトをロード/操作することは
できますか?
</para>
</question>
<answer>
<para>
これは PHP とは関係ありません。ActiveX オブジェクトは、HTML
ドキュメントから要求があった場合にクライアント側でロードされます。
PHP スクリプトとは関係が無く、従ってサーバー側と直接やりとりすることも
できません。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q11">
<question>
<para>
実行中のコンポーネントのインスタンスを取得することはできますか?
</para>
</question>
<answer>
<para>
モニカーを使用すれば可能です。同じ Word インスタンスに対して複数の
参照を取得したい場合は、以下のようにしてインスタンスを生成します。
</para>
<programlisting>
<![CDATA[
<?php
$word = new COM("C:\docs\word.doc");
?>
]]>
</programlisting>
<para>
こうすれば、実行中のインスタンスが無い、もしくはインスタンスの
取得が不可能だった場合には新規に生成され、インスタンスが取得できた
場合にはそのハンドルを返します。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q12">
<question>
<para>
COM オブジェクトから送られてくるイベントを扱う方法はありますか?
</para>
</question>
<answer>
<para>
イベントシンクを定義し、<function>com_event_sink</function>
を使用してそれをバインドすることが可能です。PHP でイベントシンククラスの
雛形を作成するために <function>com_print_typeinfo</function> を
使用することが可能です。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q13">
<question>
<para>
2 つ以上のインターフェイスを公開している COM オブジェクトのメソッドを
呼び出そうとして困っています。どうすればよいですか?
</para>
</question>
<answer>
<para>
この問題に対する答えは、簡単ですが残念なものです。正確には
わかりませんが、おそらく打つ手はありません。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q14">
<question>
<para>
PHP は COM を扱えるということは分かりました。では COM+ については
どうですか?
</para>
</question>
<answer>
<para>
COM+ とは MTS(Microsoft Transaction Server) と MSMQ(Microsfot
Message Queue Service) を通じてコンポーネントを操作する
フレームワークによって COM を拡張したものです。が、PHP がそういった
コンポーネントをサポートするにあたって特別に必要なことはありません。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q15">
<question>
<para>
PHP が COM オブジェクトを操作することができるということは、MTS を
使ってコンポーネントリソースを扱えると考えてもよいということですか?
</para>
</question>
<answer>
<para>
PHP それ自体はまだトランザクションをサポートしていません。従って
エラーが発生してもロールバック処理は行われません。もし
トランザクションをサポートするコンポーネントを使用する場合は、
自分でトランザクション処理を実装する必要があります。
</para>
</answer>
</qandaentry>
</qandaset>
</chapter>
<!-- 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:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->