2017-04-04 39 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