IOS Marshal.PtrToStructure System.ExecutionEngineException

时间:2016-08-15 10:10:06

标签: c# ios xamarin xamarin.forms executionengineexception

嘿,我想知道以下问题是否有解决办法,因为我似乎无法在任何地方找到一个,而且我现在已经没有想法了。

我正在编写一个程序,使用Xamarin.Forms来运行android和IOS,以下两个代码版本都可以在android上运行,但是当第二个版本在IOS上运行但第一个版本运行时会抛出ExecutionEngineException。

protected static object ReadStruct(BinaryReader reader, Type structType, ChunkHeader chunkHeader)
{
    int size = Marshal.SizeOf(structType);
    if (size != chunkHeader.chunkSize) // check the actual size of this chunk object with the expected size from the stream
    {
        throw new IOException("Invalid file format, incorrect " + chunkHeader.chunkName + " chunk size (exp.: " + size + ", read: " + chunkHeader.chunkSize + ")");
    }

    byte[] data = reader.ReadBytes(size);
    IntPtr buffer = Marshal.AllocHGlobal(size);
    Marshal.Copy(data, 0, buffer, size);
 // the line that crashes follows this
    object structObject = Marshal.PtrToStructure(buffer, structType);
    Marshal.FreeHGlobal(buffer);
    return structObject;
}

上述代码在两个版本中保持不变。

public struct OvdBChunk 
{
   // stuff in here but not important
}

上面的示例有效但是为了这个和所有未来的更新,我将需要继承旧版本,因为东西可能已在更新的设备中更新,因此已被添加到但将始终保留旧的东西,所以我将其更改为以下

public class OvdBChunk : OvdAChunk
{
   // stuff in here but not important
}

structType部分是顶部代码段中正在更改的部分。

任何想法为什么当它是一个类而不是一个支柱时它会抛出System.ExecutionEngineException。以及我如何解决它的任何想法?

0 个答案:

没有答案