PHP 可以操作Win32 平台下的COM 和DCOM 物件1. 我建立了一個DLL來計算一些東西. 有什麼方法可以在PHP 下運行這個DLL嗎? 2. 'Unsupported variant type: xxxx (0xxxxx)' 是什麼意思?3. PHP 裡操作視覺化物件可能嗎? 4. 我可以把COM 物件存諸到session裡嗎? 5. 我怎麼捕捉COM 錯誤? 6. 我怎麼在PHP 裡產生DLL文件,就像我在Perl 裡做的一樣? 7. 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' 是什麼意思? 8. 我怎樣從遠端伺服器運行COM 物件? 9. 我得到訊息: 'DCOM is disabled in C:path...scriptname.php on line 6', 我該怎麼辦? 10. 在PHP頁裡可以載入ActiveX 物件嗎? 11. 可不可以得到一個COM執行時間的實例? 12. 有沒有辦法可以處理從COM 物件送出的事件? 13. 我在呼叫一個COM 物件(有多個介面)的方法時出錯, . 我該怎麼辦? 14. PHP 可以COM工作, 那麼COM 呢? 15. PHP 可以操作COM 物件, 我們是否可以設想透過MTS 管理元件資源, 從而管理PHP ?
1. 我創建了一個DLL來計算一些東西. 有什麼方法可以在PHP 下運行這個DLL嗎?
你不能在PHP裡操作簡單的DLL.如果這個DLL包含COM伺服器並實現了IDispatch 接口,你可以操作它.
2. 'Unsupported variant type: xxxx (0xxxxx)' 是什麼意思?
有很多VARIANT 類型和它們的集合. 絕大多數已經被支持,可是還有少數不支持.數組也不完全支持,只有一維數組才被支持. 如果你還發現不支援的資料類型:請送 bug 報告(如果還沒有報告) 並且提供盡可能多的資訊.
3. PHP 裡操作視覺化物件可能嗎?
通常是可以的.但是 PHP 多是用來作為腳本運行在web 伺服器設備下, 而可視化對象從來不會出現在伺服器桌面. 如果你使用PHP 作為應用程序腳本如 PHP-GTK ,那麼通過 COM操作可視化對像是沒有限制的.
4. 我可以把COM 物件存諸到 session裡嗎 ?
不可以. COM 實例被認為是資源.因此它們只能在單一的腳本程式裡起作用.
5. 我怎麼捕獲COM 錯誤?
當前沒有其它工具可以追踪COM 錯誤,除了PHP 自已(@, track_errors, ..), 我們正在考慮實現它的一種方法.
6. 我可以在PHP 裡產生DLL文件,就像我在Perl 裡做的一樣?
不可以.不幸的是沒有任何這樣的PHP工具.
7. 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' 是什麼意思?
這個錯誤有多方面的原因:
CLSID號碼是錯誤的
找不到COM所在的DLL
元件沒有實作IDispatch 介面
8. 我怎麼從遠端伺服器運作COM 物件?
就像你運作本地物件一樣. 你只需要把遠端的IP位址當作第二個參數傳給COM 建構器.
還要確認你的php.ini檔案裡com.allow_dcom=true .
9. 我得到訊息: 'DCOM is disabled in C:path...scriptname.php on line 6 ', 我該怎麼辦?
編輯php.ini檔案,設定com.allow_dcom=true.
10. 在PHP頁面裡可以載入ActiveX 物件嗎?
這應該與PHP無關. ActiveX 是客戶端物件,由HTML 頁面呼叫. 和PHP 腳本沒有直接關係. 當然,也沒有直接的服務端交互的可能.
11. 可不可以獲得一個COM運行時的實例? ?
用monikers可以實現這個功能. 你想要得到同一個Word實例的多個引用,可以用下面的代碼: that instance like shown:
$word = new COM("C:docsword.doc");
如果沒有Word的實例在運行,它會創建新的實例.否則,它會返回它的句柄.
12. 有沒有辦法可以處理從COM 物件送出的事件?
還不能.
13. 我在呼叫一個COM 物件(有多個介面)的方法時出錯, . 我該怎麼辦?
答案簡單得讓人不滿意. 我不是太清楚,但我想你不用做什麼. 如果還有人關於這有一些情況和看法,請讓我(harald.radi@nme.at) 知道:)
14. PHP 可以COM工作, 那麼COM 呢?
COM 擴展了COM 框架,用來通過MTS 和MSMQ管理組件.沒有什麼特殊的東西PHP不支持.
15. PHP 可以操作COM 對象, 我們是否可以設想通過MTS 管理元件資源, 從而管理PHP ?
PHP 本身還不能處理交易. 也就是說如果有錯誤發生它還是不會主動滾回. 即使用支援交易的元件物件,你還是要自己實現交易的管理. (交易- transactions)