日期:2014-05-17  浏览次数:21962 次

C#写的结构体通过SIZEOF获取结构体的大小问题
   public struct SXPSERVER
        {
           [MarshalAs(UnmanagedType.ByValArray, SizeConst=6)] 
           public  byte [] bNodeaddr;
           public uint dwIp;//IP地址
           [MarshalAs(UnmanagedType.ByValTStr,SizeConst=16)]
           public char[] szMachineType;
        }
 这是我的结构体
SXPSERVER s = new SXPSERVER();
                int size = Marshal.SizeOf(s);
会提示SXPSERVER”不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量。 请问各位大婶是啥意思?

------解决方案--------------------
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=16)]
public?char[]?szMachineType;

这代码错了,那个ByValTStr是用来修饰String类型的,你却用来修饰数组,如果是char[],必须用ByValArray,或者你直接修改为
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=16)]
public?string?szMachineType;

这代码错了,那个ByValTStr是用来修饰St