.NET字节数组COM强制转换问题

本文关键字:转换 问题 COM 字节 字节数 数组 NET | 更新日期: 2023-09-27 18:01:15

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

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

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

.NET字节数组COM强制转换问题

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

var comArray = (Array)(object)comObject.CallToComObject();
byte[] data = new byte[comArray.Length];
Array.Copy(comArray, data, data.Length);

我不确定是否有办法避免抄袭。

编辑:

由于我不知道的原因,如果以动态方式返回非零下界数组,即CallToComObject的签名具有dynamic返回值类型,那么如果我们只是尝试将其强制转换为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);