/// <summary> /// Write a string resource to a binary stream. /// </summary> /// <param name="w">Binary stream.</param> internal void Write(BinaryWriter w) { // write the block info var headerPos = w.BaseStream.Position; // wLength w.Write(_header.wLength); // wValueLength w.Write(_header.wValueLength); // wType w.Write(_header.wType); // szKey w.Write(Encoding.Unicode.GetBytes(_key)); // null terminator w.Write((UInt16)0); // pad fixed info ResourceUtil.PadToDWORD(w); var valuePos = w.BaseStream.Position; if (_value != null) { // value (always double-null-terminated) w.Write(Encoding.Unicode.GetBytes(_value)); } // wValueLength ResourceUtil.WriteAt(w, (w.BaseStream.Position - valuePos) / Marshal.SystemDefaultCharSize, headerPos + 2); // wLength ResourceUtil.WriteAt(w, w.BaseStream.Position - headerPos, headerPos); }
/// <summary> /// Write the hardware independent dictionary of language and code page identifier tables to a binary stream. /// </summary> /// <param name="w">Binary stream.</param> internal override void Write(BinaryWriter w) { var headerPos = w.BaseStream.Position; base.Write(w); var varsEnum = _vars.GetEnumerator(); while (varsEnum.MoveNext()) { varsEnum.Current.Value.Write(w); } ResourceUtil.WriteAt(w, w.BaseStream.Position - headerPos, headerPos); }
/// <summary> /// Write this version resource to a binary stream. /// </summary> /// <param name="w">Binary stream.</param> internal override void Write(BinaryWriter w) { var headerPos = w.BaseStream.Position; _header.Write(w); if (_fixedfileinfo != null) { _fixedfileinfo.Write(w); } var resourceEnum = _resources.GetEnumerator(); while (resourceEnum.MoveNext()) { resourceEnum.Current.Value.Write(w); } ResourceUtil.WriteAt(w, w.BaseStream.Position - headerPos, headerPos); }
/// <summary> /// Write the string table to a binary stream. /// </summary> /// <param name="w">Binary stream.</param> /// <returns>Last unpadded position.</returns> internal override void Write(BinaryWriter w) { var headerPos = w.BaseStream.Position; base.Write(w); var total = _strings.Count; var stringsEnum = _strings.GetEnumerator(); while (stringsEnum.MoveNext()) { stringsEnum.Current.Value.Write(w); ResourceUtil.WriteAt(w, w.BaseStream.Position - headerPos, headerPos); // total parent structure size must not include padding if (--total != 0) { ResourceUtil.PadToDWORD(w); } } }
/// <summary> /// Write the table of language and code page identifier pairs to a binary stream. /// </summary> /// <param name="w">Binary stream.</param> /// <returns>Last unpadded position.</returns> internal override void Write(BinaryWriter w) { var headerPos = w.BaseStream.Position; base.Write(w); var languagesEnum = _languages.GetEnumerator(); var valuePos = w.BaseStream.Position; while (languagesEnum.MoveNext()) { // id w.Write(languagesEnum.Current.Key); // code page w.Write(languagesEnum.Current.Value); } ResourceUtil.WriteAt(w, w.BaseStream.Position - valuePos, headerPos + 2); ResourceUtil.PadToDWORD(w); ResourceUtil.WriteAt(w, w.BaseStream.Position - headerPos, headerPos); }