根據上一篇博文,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