好的,这可能很简单,但我没有任何在 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);
但这给了我一个可能未初始化的结构的错误。这不应该与写入任意非托管缓冲区无关吗?