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
, и какие-нибудь идеи о том, как я могу это исправить?