1
好吧,这个可能很简单,但我没有处理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);
但是,这给了我一个可能未初始化结构的错误。在写入任意非托管缓冲区时,这不应该是无关紧要的吗?
不要看你的代码行,我的第二个代码行之间的区别......正如我已经说过,我得到一个错误对未初始化结构 – mbue
我没有看到任何错误。谁在说这个? – hazzik
你实际上把你的x初始化写成'var x = new MessageHeader();' – hazzik