C# .NET字节数组COM转换问题

C# .NET字节数组COM转换问题,c#,casting,com,C#,Casting,Com,我有一个对COM对象的动态方法调用。当我尝试将结果作为字节[]返回时,出现以下异常: System.InvalidCastException:无法将“System.Byte[*]”类型的对象强制转换为“System.Byte[]”类型 任何帮助都将不胜感激。您案例中的COM对象方法似乎返回一个非零下限数组。您可以创建一个普通字节数组,然后从第一个数组复制数据,如下所示: var comArray = (Array)(object)comObject.CallToComObject(); byt

我有一个对COM对象的动态方法调用。当我尝试将结果作为字节[]返回时,出现以下异常:

System.InvalidCastException:无法将“System.Byte[*]”类型的对象强制转换为“System.Byte[]”类型


任何帮助都将不胜感激。

您案例中的COM对象方法似乎返回一个非零下限数组。您可以创建一个普通字节数组,然后从第一个数组复制数据,如下所示:

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

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

Array.Copy(comArray, data, data.Length);
我不确定是否有办法避免抄袭

编辑:


出于我未知的原因,如果以动态方式返回非零下限数组,即
CallToComObject
的签名具有
dynamic
返回值类型,那么如果我们尝试将其强制转换为
array
,将引发异常。首先将其投射到
对象
似乎可以解决问题。我不知道为什么。

谢谢乔恩·斯基特的提示

一旦我了解了问题所在,就没多久就找到了解决办法。感谢这篇文章:

固定代码:

                    object fileData = _imageServerApplication.GetActualFile();
                    Array fileDataArray = (Array) fileData;
                    byte[] fileDataBytes = new byte[fileDataArray.Length];
                    fileDataArray.CopyTo(fileDataBytes, 0);

如果您创建了一个具有非零下限的数组,则会发生这种情况。COM对象正在做什么?它正在以字节[]数组的形式从存储提供程序检索文档。这个COM组件是一个黑盒。无法访问源。有没有办法解决这个问题?在上面的第2行失败,之前报告过相同的异常。我没有var comArray,我有动态comArray。@c0D3l0g1c,我更新了答案,尝试将返回值转换为
对象,然后转换为
数组。