好的,这个可能很简单,但我没有在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);
但是这给了我一个可能未初始化的结构的错误。写入任意非托管缓冲区不应该无关紧要吗?
答案 0 :(得分:1)
试试这个。 <{1}}已经是指针,已经修复了。
x.Prefix