.NET 字节数组 COM 转换问题

.NET Byte Array COM casting issue

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

System.InvalidCastException: Unable to cast object of type 'System.Byte[*]' to type 'System.Byte[]'

如有任何帮助,我们将不胜感激。

您的 COM 对象方法似乎 return 一个非零下限数组。您可以创建一个普通字节数组,然后像这样从第一个数组复制数据:

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

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

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

我不确定是否有避免复制的方法。

编辑:

出于我不知道的原因,如果非零下限数组以动态方式 returned,即 CallToComObject 的签名具有 dynamic return 值类型,那么如果我们简单地尝试将其转换为 Array 就会抛出异常。首先将其转换为 object 似乎可以解决问题。不知道为什么。

感谢 Jon Skeet 的提示。

一旦我了解了问题所在,很快就找到了解决方案。感谢这篇文章:https://weblog.west-wind.com/posts/2008/Aug/26/Accessing-a-SafeArray-Result-from-a-COM-Call-in-C

固定码:

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