/// <summary>Create instance of init control data with header and payload</summary> /// <param name="header">Header</param> /// <param name="data">Payload</param> public ControlInitData(MfcCtrlData header, Byte[] data) { this.ControlID = header.ControlID; this.MessageID = header.MessageID; this.DataLength = header.DataLength; this.Data = data; }
/// <summary>Get array of MFC dialog init data</summary> /// <returns>MFC dialog init data</returns> public IEnumerator <ResourceDialogInit.ControlInitData> GetEnumerator() { UInt32 padding = 0; UInt32 headerDataSize = (UInt32)Marshal.SizeOf(typeof(MfcCtrlData)); using (PinnedBufferReader reader = base.CreateDataReader()) while (padding < reader.Length) { MfcCtrlData header = reader.BytesToStructure <MfcCtrlData>(ref padding); Byte[] data = reader.GetBytes(padding, (UInt32)header.DataLength); padding += (UInt32)header.DataLength; yield return(new ControlInitData(header, data)); if (padding + headerDataSize > reader.Length) { yield break; //TODO: В заключении, обычно, идут 2 байта. Но проверял пока только на DBaseTool } } }