IOS Marshal.PtrToStructure System.ExecutionEngineException

Привет, мне было интересно, есть ли решение для следующей проблемы, так как я не могу найти нигде, и у меня закончились идеи.

Я пишу программу, использующую Xamarin.Forms для запуска как на Android, так и на IOS, следующие версии кода работают на Android, однако выдает исключение ExecutionEngineException, когда вторая версия запускается на IOS, но первая работает.

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 ответов

Другие вопросы по тегам