天天看點

php調用C#生成的dll(二)

根據上一篇博文,php調用c#生成的動态庫,運作測試時報Fatal error: Class 'COM' not found in XXXXXXXXX

原因是php.ini中未開啟COM元件的應用,解決方法

檢視php.ini中是否已經開啟了com.allow_dcom = true

從php/ext/裡面查找一下有沒有這個php_com_dotnet.dll這個檔案

如果沒有網上下載下傳個,一般都會有的吧應該大概可能。。

然後查找這個php.ini裡面查找下#extension=php_com_dotnet.dll把前面的#号去掉

如果找不到就複制,手動添加一下

然後輸出下phpinfo()

看看有沒有com_dotnet 标簽中

COM support enabled

DCOM support enabled

.Net support       enabled

表示COM元件開啟成功

然後建立一個php檔案在裡面寫上:

$com = new COM('word.application');  (#注意word.application 是電腦中必須有word文檔才可以的)

echo $com;

如果沒錯的話應該會顯示    Microsoft Word 說明COM擴充已經安裝完成了!

再次運作上次博文中的測試程式,能正常顯示“Hello,World”

c#動态庫注冊和反注冊的幾個指令

1、添加程式集到全局緩存,以便于在任意位置注冊該dll元件

copy SendMail.dll 到 gacutil指令相同的目錄

(指令參考目錄 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools,gacutil運作環境版本不限,示例使用NETFX 4.5.1)

執行:gacutil /i SendMailLib.dll

2、注冊元件及類型到系統資料庫

指令行轉到regasm對應的目錄,這裡不需要指定SendMailLib.dll位置,自動從全局緩存擷取,

指令參考目錄:C:\Windows\Microsoft.NET\Framework64\v4.0.30319 </div><div>    (注意:版本必須根據作業系統選擇 x86 / 64bit, 否則注冊後無法調用)

執行:

regasm SendMailLib.dll

動态庫是否注冊可在系統資料庫中用CTRL-F檢視

3、登出元件,并清除相應緩存

regasm SendMailLib.dll /unregister