private byte[] xamStructToBytesB(ZBpara s) { int size = Marshal.SizeOf(s); System.IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(s, ptr, true); byte[] ba = new byte[size]; Marshal.Copy(ptr, ba, 0, ba.Length); return(ba); }
private ZBpara xamBytesToStructB(byte[] arr) { ZBpara struReturn = new ZBpara(); int size = Marshal.SizeOf(struReturn); System.IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.Copy(arr, 0, ptr, arr.Length); struReturn = (ZBpara)Marshal.PtrToStructure(ptr, struReturn.GetType()); Marshal.FreeHGlobal(ptr); return(struReturn); }
public bool GetDefaultSetting(ref ZBpara mpara) { bool error = false; string path = Application.StartupPath; path = path + @"\DefaultData"; if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } if (error == false) { path = path + @"\DefaultSetting.ini"; if (System.IO.File.Exists(path)) // 参数定义文件存在! { ZBpara mp = new ZBpara(); // 定义一个存储 参数表 的数据结构实例 byte[] readblock = new byte[Marshal.SizeOf(mp)]; FileStream afile = new FileStream(path, FileMode.Open); BinaryReader r = new BinaryReader(afile); // 定义一个 二进制 文件流 try // 开始读取 参数文件 结构,由于本参数表只有一个 结构,故只读入一个结构数据即可 { readblock = r.ReadBytes(Marshal.SizeOf(mp)); // 从定义的二进制文件流 中读取 MatchPixel结构 的二进制数据 长度数据 mp = xamBytesToStructB(readblock); mpara = mp; // 将读取的值 置入需要的 MatchPixel实例中 } catch (Exception ex) { error = true; mpara.Init(); // 置初始化数据 MessageBox.Show("读参数文件出错!" + ex.Message); } finally { r.Close(); afile.Close(); afile.Dispose(); } } else { mpara.Init(); error = true; } } return(!error); }
public bool SetDefaultSetting(ZBpara mpara) // 保存参数表结构为 默认参数表 { bool error = false; string path = Application.StartupPath; path = path + @"\DefaultData"; if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } if (error == false) { path = path + @"\DefaultSetting.ini"; if (System.IO.File.Exists(path)) { File.Delete(path); // 如果存在原来的 ini 文件,删除重写! } FileStream afile = new FileStream(path, FileMode.Append); BinaryWriter r = new BinaryWriter(afile); // 定义一个 二进制 文件流 byte[] readblock = new byte[Marshal.SizeOf(mpara)]; // 将参数表结构转换为 二进制流 数据 readblock = xamStructToBytesB(mpara); try { r.Write(readblock); } catch (Exception ex) { error = true; MessageBox.Show("参数文件保存出错!" + ex.Message); } finally { r.Close(); afile.Close(); afile.Dispose(); } } return(!error); }