2016-08-05 83 views
2

我有一個動態方法調用一個COM對象。當我嘗試返回結果爲byte []時,我得到以下例外:.NET字節數組COM對象問題

System.InvalidCastException:無法強制類型爲'System.Byte [*]'

任何幫助,將不勝感激。

+1

如果你已經創建了一個非零下界的數組會發生。什麼是COM對象在做什麼? –

+0

它從存儲提供程序中以byte []數組的形式檢索文檔。這個COM組件是一個黑匣子。無法訪問源代碼。有沒有辦法來解決這個問題? – c0D3l0g1c

回答

1

您的情況下的COM對象方法似乎返回一個非零下限數組。你可以創建一個普通的字節數組,然後將數據從第一陣列複製這樣的:

var comArray = (Array)(object)comObject.CallToComObject(); 

byte[] data = new byte[comArray.Length]; 

Array.Copy(comArray, data, data.Length); 

我不知道是否有辦法避免複製。

編輯:

對於未知給我一個原因,如果非零下限陣列以動態的方式返回,即,CallToComObject簽名具有dynamic返回值的類型,則異常如果我們只是試圖將其轉換爲Array,將會拋出。將它投射到object首先似乎解決了這個問題。我不知道爲什麼。

+0

上面的第2行失敗,前面報告了相同的例外情況。我沒有var comArray,我有動態comArray。 – c0D3l0g1c

+0

@ c0D3l0g1c,我更新了答案,嘗試將返回值轉換爲'object',然後轉換爲'Array'。 –