示例#1
0
        public MODULE(PROJECTINFORMATION ProjectInformation, XlBinaryReader Data)
        {
            this.NameRecord        = new MODULENAME(ProjectInformation, Data);
            this.NameUnicodeRecord = new MODULENAMEUNICODE(Data);
            this.StreamNameRecord  = new MODULESTREAMNAME(ProjectInformation, Data);
            this.DocStringRecord   = new MODULEDOCSTRING(Data);
            this.OffsetRecord      = new MODULEOFFSET(Data);
            this.HelpContextRecord = new MODULEHELPCONTEXT(Data);
            this.CookieRecord      = new MODULECOOKIE(Data);
            this.TypeRecord        = new MODULETYPE(Data);

            if (Data.PeekUInt16() == (UInt16)0x0025)
            {
                this.ReadOnlyRecord = new MODULEREADONLY(Data);
            }

            if (Data.PeekUInt16() == (UInt16)0x0028)
            {
                this.PrivateRecord = new MODULEPRIVATE(Data);
            }

            this.Terminator = Data.ReadUInt16();
            this.Reserved   = Data.ReadUInt32();

            Validate();
        }
示例#2
0
        public REFERENCE(PROJECTINFORMATION ProjectInformation, XlBinaryReader Data)
        {
            this.NameRecord = new REFERENCENAME(ProjectInformation, Data);

            var peek = Data.PeekUInt16();

            if (peek == 0x002F)
            {
                this.ReferenceRecord = new REFERENCECONTROL(ProjectInformation, Data);
            }
            else if (peek == 0x0033)
            {
                // todo: Test this, documentation says 0x0033 is REFERENCECONTROL too but this seems odd
                this.ReferenceRecord = new REFERENCEORIGINAL(Data);
            }
            else if (peek == 0x000D)
            {
                this.ReferenceRecord = new REFERENCEREGISTERED(Data);
            }
            else if (peek == 0x000E)
            {
                this.ReferenceRecord = new REFERENCEPROJECT(ProjectInformation, Data);
            }
            else
            {
                throw new WrongValueException("peek", peek, "0x002F, 0x0033, 0x000D or 0x000E");
            }

            Validate();
        }
        public REFERENCECONTROL(PROJECTINFORMATION ProjectInformation, XlBinaryReader Data)
        {
            this.Id                  = Data.ReadUInt16();
            this.SizeTwiddled        = Data.ReadUInt32();
            this.SizeOfLibidTwiddled = Data.ReadUInt32();
            this.LibidTwiddled       = Data.ReadBytes(this.SizeOfLibidTwiddled);
            this.Reserved1           = Data.ReadUInt32();
            this.Reserved2           = Data.ReadUInt16();

            UInt16 peek = Data.PeekUInt16();

            if (peek == (UInt16)0x0016)
            {
                // REFERENCENAME record
                this.NameRecordExtended = new REFERENCENAME(ProjectInformation, Data);
            }

            this.Reserved3           = Data.ReadUInt16();
            this.SizeExtended        = Data.ReadUInt32();
            this.SizeOfLibidExtended = Data.ReadUInt32();
            this.LibidExtended       = Data.ReadBytes(this.SizeOfLibidExtended);
            this.Reserved4           = Data.ReadUInt32();
            this.Reserved5           = Data.ReadUInt16();
            this.OriginalTypeLib     = Data.ReadGuid();
            this.Cookie = Data.ReadUInt32();

            Validate();
        }
        public PROJECTREFERENCES(PROJECTINFORMATION ProjectInformation, XlBinaryReader Data)
        {
            var result = new List <REFERENCE>();

            // Read without progressing the pointer.
            // 0x000F indicates the beginning of a PROJECTMODULES Record, so we're done once we encounter that.
            while (Data.PeekUInt16() != 0x000F)
            {
                var reference = new REFERENCE(ProjectInformation, Data);
                result.Add(reference);
            }

            this.ReferenceArray = result.ToArray();
        }