根据上一篇博文,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
pause gacutil /u SendMailLib