Nếu tôi sắp xếp cấu trúc này với StructureToPtr
và sau đó unmarshal nó một lần nữa với PtrToStructure
, nút đầu tiên của tôi có y = {1,2} trong khi nút thứ hai của tôi có y = {1,0}.Marshal.StructureToPtr không thành công với mảng kích thước bool và cố định?
Tôi không biết tại sao, có lẽ cấu trúc của tôi là xấu bằng cách nào đó? Loại bỏ các bool
từ cấu trúc làm cho nó hoạt động.
using System;
using System.Runtime.InteropServices;
namespace csharp_test
{
unsafe class Program
{
[StructLayout(LayoutKind.Sequential)]
public struct Node
{
public bool boolVar;
public fixed int y[2];
}
unsafe static void Main(string[] args)
{
Node node = new Node();
node.y[0] = 1;
node.y[1] = 2;
node.boolVar = true;
int size = sizeof(Node);
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(node, ptr, false);
Node node2 = (Node)Marshal.PtrToStructure(ptr, typeof(Node));
Marshal.FreeHGlobal(ptr);
}
}
}
Có lẽ nó phải làm điều gì đó với 'bool' được so sánh dưới dạng 4 byte (' BOOL') chứ không phải 1 byte? Nhưng tôi không thể nghĩ ra lý do chính xác ... – Mehrdad
Hơn nữa, nó bỏ qua bất kỳ phần tử mảng nào sau phần tử đầu tiên (viết chúng dưới dạng số không vào bộ nhớ không được quản lý). Nó cũng không quan trọng nếu 'bool' đến trước mảng hoặc sau trong cấu trúc. – GSerg