如果我用StructureToPtr
編組這個結構,然後再用PtrToStructure
解組它,我的第一個節點有y = {1,2},而我的第二個節點有y = {1,0}。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'編組爲4字節('BOOL')而不是1個字節?但我想不出確切的原因...... – Mehrdad 2012-02-05 19:37:07
此外,它忽略了第一個數組元素之後的任何數組元素(將它們作爲零寫入非託管內存中)。如果'bool'出現在陣列之前或結構之後,也沒有關係。 – GSerg 2012-02-05 19:42:29