//结构体定义
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]//CharSet.Unicode也是此异常
public struct LoginResponseTerStruct
{
/// <summary>
/// 头信息
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
public byte Head;
……
}
int size = Marshal.SizeOf(typeof(LoginResponseTerStruct));
/*
此处异常:类型LoginResponseTerStruct不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量
*/
求教!
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]//CharSet.Unicode也是此异常
public struct LoginResponseTerStruct
{
/// <summary>
/// 头信息
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
public byte Head;
……
}
int size = Marshal.SizeOf(typeof(LoginResponseTerStruct));
/*
此处异常:类型LoginResponseTerStruct不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量
*/
求教!
public struct LoginResponseTerStruct
{
/// <summary>
/// 头信息
/// </summary>
[MarshalAs(UnmanagedType.I1, SizeConst = 1)]
public byte Head; } static void Main(string[] args)
{ int size = Marshal.SizeOf(typeof(LoginResponseTerStruct)); Console.WriteLine(size);
I1 --> 1 字节带符号整数。
ByValArray -->当 MarshalAsAttribute.Value 设置为 ByValArray 时,必须设置 SizeConst 以指示数组中的元素数。当需要区分字符串类型时,ArraySubType 字段可以选择包含数组元素的 UnmanagedType。此 UnmanagedType 只可用于作为结构中的字段的数组。 msdn
public byte[] GoHea;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)]
public byte[] GoHea;-----------------------
public byte Head;
对应的是[MarshalAs(UnmanagedType.I1, SizeConst = 1)],我没让你全改这个啊,
public byte[] GoHea;是数组,对应UnmanagedType.ByValArray//看看那个msdn的链接,介绍很详细
http://www.cnblogs.com/blue-th/articles/1295180.html
public struct LoginResponseTerStruct
{
/// <summary>
/// 头信息
/// </summary>
[MarshalAs(UnmanagedType.I1, SizeConst = 1)]
public byte Head; } static void Main(string[] args)
{ int size = Marshal.SizeOf(typeof(LoginResponseTerStruct)); Console.WriteLine(size);