PHP和VBS - 使用COM

时间:2017-05-30 07:40:40

标签: php variables vbscript com

我的问题是this

我正在使用PHP在IIS 7上使用类COM调用服务器上的对象。

该对象已经很好地创建了,但是当我使用它的方法时,PHP会返回此错误:

PHP Fatal error:  Uncaught exception 'com_exception' with message 'Parameter 2: Type mismatch.

错误总是发生在最后一个参数中,无论错误是否实际存在于第一个参数中(我想是这样,因为在同一个组件中使用了另一个函数,我发送了所有变量并且都是字符串)。

我的PHP代码:

$com = new COM("LogicControlOEM.OEM_EjecutaOEM", NULL, CP_UTF8, 'LogicControlOEM') or die("Error al cargar el componente");

$empresa = 1;
$usuario = 'XXX';
$pass = 'XXX';

$com->InicializaOEM($empresa, 
    $usuario, 
    $pass);

var_dump($com);

$com = null;

我从函数中删除了可选值。你可以看到下面的代码。

我在文件.vbs中尝试了相同的参数,并且工作正常。

我正在打开一个新问题,因为它不同,我不知道Visual Basic脚本中的VT_PTR是什么类型,我想将php变量转换为此类型。

即使有可能,我也不知道。

我使用php函数com_print_typeinfo()来查看组件内的代码:

com_print_typeinfo($com);

它显示了VBS(?)中的代码:

class _OEM_EjecutaOEM { /* GUID={XXXXXXX-XXXX-XXX-XXX-XXXXXXXXXXX} */
/* DISPID=1610612736 */
function QueryInterface(
    /* VT_PTR [26] [in] --> ? [29]  */ &$riid,
    /* VT_PTR [26] [out] --> VT_PTR [26]  */ &$ppvObj 
    )
{
}
/* DISPID=1610612737 */
/* VT_UI4 [19] */
function AddRef(
    )
{
}
/* DISPID=1610612738 */
/* VT_UI4 [19] */
function Release(
    )
{
}
/* DISPID=1610678272 */
function GetTypeInfoCount(
    /* VT_PTR [26] [out] --> VT_UINT [23]  */ &$pctinfo 
    )
{
}
/* DISPID=1610678273 */
function GetTypeInfo(
    /* VT_UINT [23] [in] */ $itinfo,
    /* VT_UI4 [19] [in] */ $lcid,
    /* VT_PTR [26] [out] --> VT_PTR [26]  */ &$pptinfo 
    )
{
}
/* DISPID=1610678274 */
function GetIDsOfNames(
    /* VT_PTR [26] [in] --> ? [29]  */ &$riid,
    /* VT_PTR [26] [in] --> VT_PTR [26]  */ &$rgszNames,
    /* VT_UINT [23] [in] */ $cNames,
    /* VT_UI4 [19] [in] */ $lcid,
    /* VT_PTR [26] [out] --> VT_I4 [3]  */ &$rgdispid 
    )
{
}
/* DISPID=1610678275 */
function Invoke(
    /* VT_I4 [3] [in] */ $dispidMember,
    /* VT_PTR [26] [in] --> ? [29]  */ &$riid,
    /* VT_UI4 [19] [in] */ $lcid,
    /* VT_UI2 [18] [in] */ $wFlags,
    /* VT_PTR [26] [in] --> ? [29]  */ &$pdispparams,
    /* VT_PTR [26] [out] --> VT_VARIANT [12]  */ &$pvarResult,
    /* VT_PTR [26] [out] --> ? [29]  */ &$pexcepinfo,
    /* VT_PTR [26] [out] --> VT_UINT [23]  */ &$puArgErr 
    )
{
}
/* DISPID=1610809345 */
function CambiaEmpresa(
    /* VT_PTR [26] [in][out] --> VT_I2 [2]  */ &$intEmpresa 
    )
{
}
/* DISPID=1610809346 */
function InicializaOEM(
    /* VT_PTR [26] [in][out] --> VT_I2 [2]  */ &$intEmpresa,
    /* VT_PTR [26] [in][out] --> VT_BSTR [8]  */ &$sUserName,
    /* VT_PTR [26] [in][out] --> VT_BSTR [8]  */ &$sPassword,
    /* VT_PTR [26] [in][out] --> VT_BSTR [8]  */ &$sProvider,
    /* VT_PTR [26] [in][out] --> VT_BSTR [8]  */ &$sDataSource,
    /* VT_PTR [26] [in][out] --> VT_BSTR [8]  */ &$sCatalog 
    )
{
}

有人可以解释一下InicializaOEM功能是如何工作的吗? 为什么在变量之前显示注释?

任何想法都非常好。

0 个答案:

没有答案