com组件的dll文件的php调用方法:
调用说明:
{
调用COM的方法:
首先要在windows的运行框中,运行regsvr32 c:/yourpath/yourcom.dll。需要注意的问题一定要把你用到的所有DLL文件都
放在一个目录下。注册成功后,你就可以调用了。
<?php
$mycom = new COM ("mycom.myclassname") or die ("error");//mycom.myclassname 点前面是你dll的名字,点后面是你在
com中定义的类的名字。
com_invoke($mycom,"yourfunctionname","para1","para2");//有几个参数就写几个para。
$mycom ->;Release();
?>;
注意:在用php想com传参数的时候,会有点问题,在传递字符串时,你的com程序一定要是BSTR类型的,如果是CHAR*就不能成功传递!
}
<?php
$dw = new COM("COMDLL.test");
$ch = $dw->Cat('1x1','2x2');
echo '<br/>',$ch;
exit;
?>
comdll文件代码
inline long Itest::Add ( long n1, long n2 ) {
long _result;
HRESULT _hr = raw_Add(n1, n2, &_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _result;
}
inline _bstr_t Itest::Cat ( _bstr_t s1, _bstr_t s2 ) {
BSTR _result;
HRESULT _hr = raw_Cat(s1, s2, &_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _bstr_t(_result, false);
}
二、
非com组件的dll文件的php访问方法:
1.下载dynwrap.dll
2.把该文件放入system32和php/ext/下,修改php.ini,增加extension=dynwrap.dll
3.注册dynwrap.dll:com:cmd regsvr32 d:/dynwrap.dll
4.将要调用的dll放入system32
5.register参数,
/*
输入参数是:
i=描述了函数的参数数量和数据类型 i=uu代表两个INT参数
f=呼叫_stdcall或者_cdecl的类型。因此,它可以在ms C++和Borland C++运行。默认为_stdcall。如果不起作用,使用_cdecl。如果不工作,那么恭喜你!!!
r=返回的数据类型。
*/
<?php
$dw = new COM("DynamicWrapper");
$dw->Register("Dll1test.dll", "add", "f=s", "i=uu", "r=l");
$ch = $dw->add(11,22); //dll的add函数调用
echo '<br/>',$ch;
/**/
$dw->Register("Dll1test.dll", "subtract", "f=s", "i=uu", "r=l");
$ch2 = $dw->subtract(42,22); //dll的sub函数调用
echo '<br/>',$ch2;
exit;
?>
dll1test.dll
#define DLL1TEST_API extern "C" _declspec(dllexport)
DLL1TEST_API int add(int a,int b)
{
return a+b;
}
DLL1TEST_API int subtract(int a,int b)
{
return a-b;
}