php com dll php COM php DynamicWrapper

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;
}

你可能感兴趣的:(PHP,api,System,dll,extension,Borland)