的字段的對象包含在.net中以便將它的數據複製到字節數組中。爲了牽制和應對我用下面的代碼:GCHandle。如何將包含字段定義爲類
C c = new C();
byte[] b = new byte[Marshal.SizeOf(c)];
GCHandle gch = GCHandle.Alloc(c, GCHandleType.Pinned);
Marshal.Copy(gch.AddrOfPinnedObject(), b, 0, b.Length);
gch.Free();
當我宣佈我的對象定義爲便接踵而來:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct A
{
public int a;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct C
{
public A a0;
public A a1;
public A a2;
}
所有做工精細。當我聲明我的對象定義如下:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct A
{
public int a;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
class C
{
public A a0;
public A a1;
public A a2;
}
也都工作正常。但是,當我我的兩個對象聲明爲類:「對象包含非基本或非blittable數據」
[StructLayout(LayoutKind.Sequential, Pack = 1)]
class A
{
public int a;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
class C
{
public A a0;
public A a1;
public A a2;
}
則引發ArgumentException在GCHandle.Alloc(...)
爲什麼當A被定義爲struct時一切正常。但是,當班級不工作?可以將這兩種類型A和C都定義爲類來工作嗎?
[This](http://stackoverflow.com/questions/15544818/non-blitable-error-on-a-blitable-type)可能有幫助 –