2016-08-05 62 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'。 –