指定的Type必须是不包含引用的结构

时间:2012-10-15 18:28:37

标签: c# .net exception structure memory-mapped-files

我正在尝试使用Write<T>类上的MemoryMappedViewAccessor函数。在这种情况下,我的T如下:

[StructLayout(LayoutKind.Explicit)]
    public struct Message
    {
        public void AddString(string str)
        {
            if (stringContents == null)
                stringContents = new byte[1024 * 10];
            stringContents = Encoding.ASCII.GetBytes(str);
        }
        public string GetString()
        {
            if (stringContents == null)
                return string.Empty;
            return Encoding.ASCII.GetString(stringContents);
        }
        [FieldOffset(0)]
        public byte[] stringContents;
    }

但是,当我拨打电话时,例如:

//Initialized Elsewhere: MemoryMappedViewAccessor writer
Message messageAlreadyOnWire = new Message();
messageAlreadyOnWire.AddString(data);
writer.Write<Message>(0, ref messageAlreadyOnWire);

我收到如下错误:

  

指定的Type必须是不包含引用的结构。   参数名称:type

我的struct中唯一的'reference'是一个字节数组。有什么方法可以解决这个问题吗?我没有使用固定长度的字节数组,但是我不确定如何在没有深入unsafe的情况下声明一个,我宁愿不这样做。

2 个答案:

答案 0 :(得分:0)

尝试将[MarshalAs(UnmanagedType.ByValArray, SizeConst = Your_Size)]应用于Message.stringContents

答案 1 :(得分:0)

作为此问题的解决方法,您可以使用MemoryMappedViewStream而不是MemoryMappedViewAccessor;然后使用传统的流读/写而不是访问器。