PHP 可以在 Win32 平臺(tái)中訪問(wèn) COM 和 DCOM 對(duì)象。
如果這是個(gè)簡(jiǎn)單的 DLL 那么還沒(méi)有辦法在 PHP 中運(yùn)行它。如果這個(gè) DLL 中包含有一個(gè) COM 服務(wù)器并且它實(shí)現(xiàn)了 IDispatch 接口,那有可能訪問(wèn)它。
有幾十種 VARIANT 類型以及它們的組合。大多數(shù)已經(jīng)被支持了但還有幾種尚未實(shí)現(xiàn)。數(shù)組沒(méi)有完全被支持。只有一維的僅用作索引的數(shù)組可以在 PHP 和 COM 之間傳遞。如果你發(fā)現(xiàn)其它未支持的類型,請(qǐng)當(dāng)作一個(gè) bug 報(bào)告(如果尚未被報(bào)告的話)并提供盡可能多的信息。
一般來(lái)說(shuō)是可以的,但是 PHP 大都用來(lái)作為 web 腳本語(yǔ)言并運(yùn)行在 web 服務(wù)器的上下文環(huán)境中,因此可視對(duì)象決不會(huì)在服務(wù)器的桌面上顯示。如果你把 PHP 用作應(yīng)用程序腳本例如結(jié)合 PHP-GTK 來(lái)使用,那么訪問(wèn)和通過(guò) COM 來(lái)操縱可視對(duì)象方面沒(méi)有限制。
不行。COM 的實(shí)例被看作是資源,因此只在一個(gè)腳本的上下文中有效。
在 PHP 5 中,COM 擴(kuò)展會(huì)發(fā)出
com_exception
異常信息,可以捕獲并檢查
code
成員來(lái)決定下一步的行為。
在 PHP 4 中除了用 PHP 自己提供的辦法之外(@,track_errors,..)不可能捕獲 COM 的錯(cuò)誤。
不行,PHP 沒(méi)有這樣的工具。
此錯(cuò)誤可以有多種原因:
完全和運(yùn)行本地對(duì)象一樣。只須將遠(yuǎn)端服務(wù)器的 IP 作為第二個(gè)變量傳遞給 COM 的構(gòu)造函數(shù)即可。
這不關(guān) PHP 的事。如果在 HTML 文檔中請(qǐng)求的話,ActiveX 對(duì)象被加載在客戶端。這和 PHP 腳本沒(méi)有關(guān)系,因此也不可能和服務(wù)器端發(fā)生直接的交互作用。
在綽號(hào)的幫助下這有可能。如果你想得到同一個(gè) word 實(shí)例的多個(gè)引用你可以這樣建立此實(shí)例:
<?php
$word = new COM("C:\docs\word.doc");
?>
如果沒(méi)有運(yùn)行中的實(shí)例這將建立一個(gè)新的實(shí)例,否則將會(huì)返回正在運(yùn)行中的實(shí)例的句柄,如果可用的話。
可以自定義事件收?qǐng)?bào)方并且用 com_event_sink()函數(shù)綁定之??梢杂? com_print_typeinfo()來(lái)讓 PHP 產(chǎn)生事件收?qǐng)?bào)方類的框架。
我也不知道怎么辦,我想這沒(méi)辦法。如果什么人有對(duì)此問(wèn)題的明確信息請(qǐng) ? 告訴我。:)
COM+ 通過(guò)使用 MTS 和 MSMQ 來(lái)管理組件的框架擴(kuò)展了 COM,但并沒(méi)有什么特殊之處使 PHP 非要支持這樣的組件。
PHP 本身還并不處理事務(wù)。因而如果出錯(cuò)也不會(huì)發(fā)動(dòng)撤回機(jī)制。如果你使用了支持事務(wù)處理的組件那你不得不自己實(shí)現(xiàn)事務(wù)管理。