明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

PHP 與 COM

[摘要]PHP 可以操作 Win32 平臺(tái)下的 COM 和 DCOM 對(duì)象 1. 我創(chuàng)建了一個(gè)DLL來(lái)計(jì)算一些東西. 有什么方法可以在 PHP 下運(yùn)行這個(gè)DLL嗎 ? 2. 'Unsupported variant type: xxxx (0xxxxx)' 是什么意思 ? 3. PHP 里...

PHP 可以操作 Win32 平臺(tái)下的 COM 和 DCOM 對(duì)象 1. 我創(chuàng)建了一個(gè)DLL來(lái)計(jì)算一些東西. 有什么方法可以在 PHP 下運(yùn)行這個(gè)DLL嗎 ? 2. 'Unsupported variant type: xxxx (0xxxxx)' 是什么意思 ? 3. PHP 里操作可視化對(duì)象可能嗎? 4. 我可以把COM 對(duì)象存諸到 session里嗎 ? 5. 我怎樣捕獲 COM 錯(cuò)誤 ? 6. 我怎樣在 PHP 里生成DLL文件,就象我在 Perl 里做的一樣? 7. 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' 是什么意思 ? 8. 我怎樣從遠(yuǎn)程服務(wù)器運(yùn)行 COM 對(duì)象? 9. 我得到消息: 'DCOM is disabled in C:\path...\scriptname.php on line 6', 我應(yīng)該怎么辦 ? 10. 在 PHP頁(yè)面里可以加載 ActiveX 對(duì)象嗎 ? 11. 可不可以得到一個(gè)COM運(yùn)行時(shí)的實(shí)例 ? 12. 有沒(méi)有辦法可以處理從 COM 對(duì)象送出的事件 ? 13. 我在調(diào)用一個(gè) COM 對(duì)象(有多個(gè)接口)的方法時(shí)出錯(cuò), . 我應(yīng)該怎么辦? 14. PHP 可以 COM工作, 那么 COM+呢 ? 15. PHP 可以操作 COM 對(duì)象, 我們是否可以設(shè)想通過(guò) MTS 管理組件資源, 從而管理 PHP ?
1. 我創(chuàng)建了一個(gè)DLL來(lái)計(jì)算一些東西. 有什么方法可以在 PHP 下運(yùn)行這個(gè)DLL嗎 ?
你不能在PHP里操作簡(jiǎn)單的DLL.如果這個(gè)DLL包含COM服務(wù)器并實(shí)現(xiàn)了 IDispatch 接口,你可以操作它.
2. 'Unsupported variant type: xxxx (0xxxxx)' 是什么意思 ?
有很多 VARIANT 類型和它們的集合. 絕大多數(shù)已經(jīng)被支持,可是還有少數(shù)不支持.?dāng)?shù)組也不完全支持,只有一維數(shù)組才被支持. 如果你還發(fā)現(xiàn)不支持的數(shù)據(jù)類型:請(qǐng)送 bug 報(bào)告(如果還沒(méi)有報(bào)告) 并且提供盡可能多的信息.
3. PHP 里操作可視化對(duì)象可能嗎?
通常是可以的.但是 PHP 多是用來(lái)作為腳本運(yùn)行在web 服務(wù)器設(shè)備下, 而可視化對(duì)象從來(lái)不會(huì)出現(xiàn)在服務(wù)器桌面. 如果你使用PHP 作為應(yīng)用程序腳本如 PHP-GTK ,那么通過(guò) COM操作可視化對(duì)象是沒(méi)有限制的.
4. 我可以把COM 對(duì)象存諸到 session里嗎 ?
不可以. COM 實(shí)例被認(rèn)為是資源.因此它們只能在單一的腳本程序里起作用.
5. 我怎樣捕獲 COM 錯(cuò)誤 ?
當(dāng)前沒(méi)有其它工具可以追蹤 COM 錯(cuò)誤,除了 PHP 自已 (@, track_errors, ..), 我們正在考慮實(shí)現(xiàn)它的一種方法.
6. 我可以在 PHP 里生成DLL文件,就象我在 Perl 里做的一樣?
不可以.不幸的是沒(méi)有任何這樣的PHP工具.
7. 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' 是什么意思 ?
這個(gè)錯(cuò)誤有多方面的原因:

CLSID號(hào)是錯(cuò)誤的
找不到COM所在的DLL
組件沒(méi)有實(shí)現(xiàn) IDispatch 接口

8. 我怎樣從遠(yuǎn)程服務(wù)器運(yùn)行 COM 對(duì)象 ?
就象你運(yùn)行本地對(duì)象一樣. 你僅僅需要把遠(yuǎn)程的IP地址作為第二個(gè)參數(shù)傳給 COM 構(gòu)造器.
還要確認(rèn)你的 php.ini文件里com.allow_dcom=true .
9. 我得到消息: 'DCOM is disabled in C:\path...\scriptname.php on line 6', 我應(yīng)該怎么辦 ?
編輯 php.ini文件,設(shè)置 com.allow_dcom=true.
10. 在 PHP頁(yè)面里可以加載 ActiveX 對(duì)象嗎 ?
這應(yīng)該與PHP無(wú)關(guān). ActiveX 是客戶端對(duì)象 ,由HTML 頁(yè)面調(diào)用. 和 PHP 腳本沒(méi)有直接關(guān)系. 當(dāng)然,也沒(méi)有直接的服務(wù)端交互的可能.
11. 可不可以得到一個(gè)COM運(yùn)行時(shí)的實(shí)例 ? ?
用monikers可以實(shí)現(xiàn)這個(gè)功能. 你想得到同一個(gè)Word實(shí)例的多個(gè)引用,可以用下面的代碼: that instance like shown: $word = new COM("C:\docs\word.doc");
如果沒(méi)有Word的實(shí)例在運(yùn)行,它會(huì)創(chuàng)建新的實(shí)例.否則,它會(huì)返回它的句柄.
12. 有沒(méi)有辦法可以處理從 COM 對(duì)象送出的事件 ?
還不能.
13. 我在調(diào)用一個(gè) COM 對(duì)象(有多個(gè)接口)的方法時(shí)出錯(cuò), . 我應(yīng)該怎么辦?
答案簡(jiǎn)單得讓人不滿意. 我不是太清楚,但我想你不用做什么. 如果還有人關(guān)于這有一些情況和看法,請(qǐng)讓 我(harald.radi@nme.at) 知道 :)
14. PHP 可以 COM工作, 那么 COM+呢 ?
COM+ 擴(kuò)展了 COM 框架,用來(lái)通過(guò)MTS 和 MSMQ管理 組件.沒(méi)有什么特殊的東西PHP不支持.
15. PHP 可以操作 COM 對(duì)象, 我們是否可以設(shè)想通過(guò) MTS 管理組件資源, 從而管理 PHP ?
PHP 本身還不能處理交易. 也就是說(shuō)如果有錯(cuò)誤發(fā)生它還是不會(huì)主動(dòng)滾回. 即使用支持交易的組件對(duì)象,你還是要 自己實(shí)現(xiàn)交易的管理. (交易 - transactions) 


標(biāo)簽:PHP 與 COM 

相關(guān)文章