この構造体をStructureToPtr
で整列化し、PtrToStructure
で再び整列化すると、私の最初のノードにはy = {1,2}があり、2番目のノードにはy = {1,0}があります。Barsと固定サイズの配列でMarshal.StructureToPtrが失敗しますか?
なぜ、おそらく私の構造体が何とか悪いとは考えられませんでしたか?構造体からbool
を削除すると正常に機能します。
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);
}
}
}
「bool」が1バイトではなく4バイト(BOOL)としてマーシャリングされなければならないかもしれませんか?しかし、私は正確な理由を考えることはできません... – Mehrdad
さらに、最初のものの後の配列要素は無視されます(アンマネージメモリにゼロとして書き込む)。 'bool'が配列の前に来るか構造の後にくるかは関係ありません。 – GSerg