写入结构内的固定长度数组

时间:2013-06-28 09:42:43

标签: c# marshalling

好的,这个可能很简单,但我没有在C#中处理非托管内存的经验。我的项目中有一个包含四个字节的固定长度数组的结构:

[StructLayout(LayoutKind.Sequential)]
unsafe struct MessageHeader {
    ...
    public fixed byte Prefix[4];
    ...
}

现在我要做的就是创建一个MessageHeader类型的对象,并为前缀分配一些字节。我尝试了以下方法:

MessageHeader x;
unsafe {
    fixed (byte* ptr = x.Prefix) {
        Marshal.Copy(new byte[] { 128 , 64, 128, 64 }, 0, new IntPtr(ptr), 4); 
    }
    ...
}

但是我收到以下错误: “你不能使用固定的语句来获取已经修复的表达式的地址”。

我尝试使用它而没有修复:

Marshal.Copy(new byte[] { 128, 64, 128, 64 }, 0, new IntPtr(x.Prefix), 4);

但是这给了我一个可能未初始化的结构的错误。写入任意非托管缓冲区不应该无关紧要吗?

1 个答案:

答案 0 :(得分:1)

试试这个。 <{1}}已经是指针,已经修复了。

x.Prefix