读书人

指定的数组不属于需要的类型,该如何解

发布时间: 2013-11-08 17:52:14 作者: rapoo

指定的数组不属于需要的类型
public struct CStationTable1Data
{
public char[] StationName;
public char[] StationNumber;
public char[] RadarHeight;
...

public void Init()
{
StationName = new char[60];
StationNumber = new char[10];
RadarHeight = new char[10];
...
}
}

public byte[] rawSerialize(object obj)
{
try
{
int rawsize = Marshal.SizeOf(obj);
byte[] rawdatas = new byte[rawsize];

IntPtr buffer = Marshal.AllocHGlobal(rawsize); //分配结构体大小的内存空间?
Marshal.StructureToPtr(obj, buffer, false); //将结构体拷到分配好的内存空间?
Marshal.Copy(buffer, rawdatas, 0, rawsize); //从内存空间拷到byte数组?
Marshal.FreeHGlobal(buffer); //释放内存空间?
return rawdatas;
}
catch (Exception ex)
{
throw ex;
}
}

//初始化结构体
CStationTable1Data StationTable1Data;
StationTable1Data.Init();
char[] StationName = "aaaa".ToCharArray();
char[] StationNumber = "11123".ToCharArray();
char[] RadarHeight = "11123".ToCharArray();

Array.Copy(StationName, StationTable1Data.StationName, StationName.Length);
Array.Copy(StationNumber, StationTable1Data.StationNumber, StationNumber.Length);
Array.Copy(RadarHeight, StationTable1Data.RadarHeight, RadarHeight.Length);

//输出到文件
string outfile = MeanClass._workDir + "dat\\" + filename;
FileStream swOf = new FileStream(outfile, FileMode.Append, FileAccess.Write);

byte[] bytData;
bytData = rawSerialize(StationTable1Data);
swOf.Write(bytData, 0, bytData.Length);

运行上面的代码到Marshal.StructureToPtr(obj, buffer, false); 的时候会抛出“指定的数组不属于需要的类型”这个错误,请问谁知道怎么解决呀?
[解决办法]
StructLayout(LayoutKind.Sequential)]
public struct CStationTable1Data
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 60)]
public char[] StationName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public char[] StationNumber;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public char[] RadarHeight;

*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

读书人网 >C#

热点推荐