作者:乔山办公网日期:
返回目录:office365
先到PHP.INI中打开COM选项,com.allow_dcom = true
PHP 5.4.5后,com/dotnet 模块e799bee5baa6e997aee7ad94e4b893e5b19e363已经成了单独的扩展,所以需要在PHP.ini中配置extension=php_com_dotnet.dll,如果PHP VERSION<5.4.5 则不需要。否则的话,可能就是报错 Fatal error: Class 'COM' not found 了
配置方法为:只需在扩展列表里添加extension=php_com_dotnet.dll即可
另外需要了解的是,COM组件虽然也是DLL扩展,但它不是PHP扩展,所以把Senc.dll拷贝到php/ext 目录,然后在PHP.INI里加载是错误的,PHP也不认识它
配置完毕后可以测试下,语句为
$word = new COM("word.application") or die("Unable to instanciate Word");
print "Loaded Word, version {$word->Version}\n";
上面语句本机必须安装了office才可以
openoffice的为:
$obj = new COM("com.sun.star.ServiceManager") or die("Unable to instanciate Word");
以下一个php调用COM访问知excel的示例:
<?php
//指定页面编码,防止出现中文乱码的情形
header('Content-type: text/html; charset=gb2312');
//启动Excel
$ms_excel = new COM("excel.application") or die("不能打开道Excel应用程序");
//打开excel文件
$ms_excel->Application->WorkBooks->Open( 'e:\test\test.xls') or die("不能打开工作簿内");
//在工作簿的第2个工作表的单容元格B1中输入文本
$ms_excel->Worksheets(2)->Range("B1")->Value = "测试";
//保存工作簿
if(!$ms_excel->ActiveWorkBook->Saved)
{
$ms_excel->ActiveWorkBook->save();
}
//关闭工作簿
$ms_excel->Quit();
//清空对象
$ms_excel = null;
?>
工作流程:
1.创建一个进程外COM服务器(EXE)。
2.将32位dll的接口函数封装为COM服务器的相关接口。
3.注册COM服务器*.exe /regserver (注销知 *.exe /unregserver)。
4.64位进程调用32位COM服务器接口,成功。从而曲线实现了64位进程调用32位dll。
具体步骤:
我首先创建了一个简单的dll工程,只输出一个函数int c = add(int a,int b); 生成lib和dll
然后创建一道个进程外COM(EXE类型),内部链接dll,添加方法Method: Add(long *c)
{ *c = add(1,2);}编译生成。专
然后注册COM,*.exe /regserver
最创建一个64位WIN32工程验证64位环境下方法调用是否正确,经验证正确!!!
结论:以属上方法可以解决64位进程调用32位dll的问题
32位进程调用64位dll应该也可以通过这种方法解决,原因64位windows系统下安装了32位和64位两套COM系统
你将这个32位的 COM 用64 位的代码封装一下,再调用试试。