【发布时间】:2010-11-14 01:03:16
【问题描述】:
我试图理解为什么下面的第二个示例没有问题,但第一个示例给了我下面的异常。在我看来,这两个例子都应该根据描述给出一个例外。谁能赐教?
未处理的异常: System.TypeLoadException:不能 从加载类型“StructTest.OuterType” 程序集'StructTest,版本= 1.0.0.0, 文化=中立,PublicKeyToken=null' 因为它包含一个对象字段 未正确对齐的偏移量 0 或被非对象字段重叠。
在 StructTest.Program.Main(字符串 [] args) 按任意键继续。 . .
示例 1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace StructTest
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct InnerType
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
char[] buffer;
}
[StructLayout(LayoutKind.Explicit)]
struct OuterType
{
[FieldOffset(0)]
int someValue;
[FieldOffset(0)]
InnerType someOtherValue;
}
class Program
{
static void Main(string[] args)
{
OuterType t = new OuterType();
System.Console.WriteLine(t);
}
}
}
示例 2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace StructTest
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct InnerType
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
char[] buffer;
}
[StructLayout(LayoutKind.Explicit)]
struct OuterType
{
[FieldOffset(4)]
private int someValue;
[FieldOffset(0)]
InnerType someOtherValue;
}
class Program
{
static void Main(string[] args)
{
OuterType t = new OuterType();
System.Console.WriteLine(t);
}
}
}
【问题讨论】:
标签: c# .net clr structlayout