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