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);  的时候会抛出“指定的数组不属于需要的类型”这个错误,请问谁知道怎么解决呀?

解决方案 »

  1.   

    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/
      

  2.   

    Quote: 引用 2 楼 feiyun0112 的回复:

    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;   
      
    *****************************************************************************
    我按你写的改了代码,但是还不行啊。提示传递给系统调用的数据区域太小,异常来自HRESULT:0x8007007A
      

  3.   

    结构体中元素初始化以后,我可以swOf.Write(Encoding.Default.GetBytes(StationTable1Data.StationName), 0, StationTable1Data.StationName.Length);
    直接手动输出每个数组,但是结构体中这样数组有上百个,请问有没有简单的办法,赋值以后可以直接按顺序输出结构体中的数组,不用一个一个的输出到文件中,要写上百行的代码。