2017-04-04 105 views
0

我通过PHP“COM”连接到与C#,C++等兼容的API。 我已成功与应用程序建立连接并尝试使用“out”通过COM参数并获得“类型不匹配”错误。是“out”参数,并且应该包含响应,然后是false。我不确定它是否会失败,或者如果它失败了,但无论如何我无法让这个工作。PHP COM和C#“Out”和布尔参数

的C#示例如下:

EdmViewInfo[] Views = null; 
vault.GetVaultViews(out Views, false); 

的PHP代码如下所示:

$this->epdm = new COM('ConisioLib.EdmVault') or die("Cannot open vault."); 

... 

$this->aviews = array();  
try { 

     $this->epdm->GetVaultViews($this->aviews, False); 

    } catch (Exception $e) { 

     echo 'Caught exception: ', $e->getMessage(), "\n"; 

} 

我得到以下返回的错误: 捕捉到异常:参数1:类型不匹配。

希望有人能帮助!

+0

'epdm'字段是如何初始化的?它是一个实际的PHP'COM'类实例还是别的? (例如,围绕PHP'COM'类调用的包装器层?) – Dai

+0

'$ this-> epdm = new COM('ConisioLib.EdmVault')或死(“无法打开保管库。”);'这是初始化。 连接初始化,我可以登录并获取一些基本信息,所以我知道它的工作原理。 'EdmViewInfo [] Views = null; vault.GetVaultViews(out Views,false);' C#示例对不起,以上是VB – Dyluck

回答

-1

它看起来是你引用的两个'数组'类型是不一样的。 ONe有大写字母,另一个没有。另外,你引用C#的例子看起来更像VB.NET。最好检查所有对Array的引用以确保找到它们。你在用什么编辑器?

+0

out参数中只有一个数组。我没有在数组部分发生错误,由于某种原因,它的“错误”部分即时得到错误。 in参数只是false或False。这似乎并不重要。 – Dyluck

0

我不十分熟悉PHP的COM扩展,但我这样做,建议使用COM [out]参数在PHP中使用&操作使PHP使用传递引用语义一些研究在线:

$arr = array(); 
$com = new COM('ConisioLib.EdmVault') or die("Cannot open vault."); 
$com->GetVaultViews(&$arr, false); 

请注意,即使$arr将被[out]参数完全覆盖,您仍需要将$arr初始化为本机PHP array类型,以便COM编组层可以知道其处理的类型。

+0

感谢戴,我得到以下错误:致命错误:呼叫时传递引用已被删除。有趣的是,它看起来像在语句中的参数1(“错误”)上的“类型错配”错误。它要求它,但不知道为什么这是失败的...... php应该正确地转换这些变量的权利? – Dyluck

+0

您确定“参数1”是否为零,并且它没有引用“数组”参数? – Dai

+0

我不确定,不知道该怎么说。我试图弄乱变量来看看参数1是否改变。如果我删除一个参数,它会变成0,但是会给出一个错误,表示它需要2个参数。有关COM扩展的信息令人惊讶的非常少。我想我不是唯一有这个问题的人。我希望我不必放弃这个概念,而是去制作一个.net应用程序。 – Dyluck