我做错了什么 我收到一个错误:在此行中:
Buffer.BlockCopy((Array) numArray, icondirentry.ImageOffset, (Array)
iconFile.iconImage[index], 0, icondirentry.BytesInRes);
错误:数组的偏移量和长度超出范围,或者计数大于从索引到源集合末尾的元素数。
此方法的完整代码为:
public static IconClass.IconFile FromFile(string filename)
{
IconClass.IconFile iconFile = new IconClass.IconFile();
byte[] numArray = File.ReadAllBytes(filename);
GCHandle gcHandle = GCHandle.Alloc((object) numArray, GCHandleType.Pinned);
iconFile.iconDir = (IconClass.ICONDIR) Marshal.PtrToStructure(gcHandle.AddrOfPinnedObject(), typeof (IconClass.ICONDIR));
iconFile.iconEntry = new IconClass.ICONDIRENTRY[checked ((int) iconFile.iconDir.Count - 1 )];
iconFile.iconImage = new byte[checked ((int) iconFile.iconDir.Count - 1)][];
int num1 = Marshal.SizeOf((object) iconFile.iconDir);
Type type = typeof (IconClass.ICONDIRENTRY);
int num2 = Marshal.SizeOf(type);
int num3 = 0;
int num4 = checked ((int) iconFile.iconDir.Count - 1);
int index = num3;
while (index <= num4)
{
IconClass.ICONDIRENTRY icondirentry = (IconClass.ICONDIRENTRY) Marshal.PtrToStructure(new IntPtr(checked (gcHandle.AddrOfPinnedObject().ToInt64() + (long) num1)), type);
iconFile.iconEntry[index] = icondirentry;
iconFile.iconImage[index] = new byte[checked (icondirentry.BytesInRes - 1 )];
Buffer.BlockCopy((Array) numArray, icondirentry.ImageOffset, (Array) iconFile.iconImage[index], 0, icondirentry.BytesInRes);
checked { num1 += num2; }
checked { ++index; }
}
gcHandle.Free();
return iconFile;
}
(Array) iconFile.iconImage[index]
检查index是否不大于IconImage成员(数组,列表或其任何大小)的大小。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句