Exemple #1
0
        public void Read(BinaryReader pBR, int pStartOffset)
        {
            IDEntries = new Dictionary <int, ResourceDirectoryEntry>();


            Characteristics = pBR.ReadInt32();
            pBR.ReadInt32();
            MajorVersion        = pBR.ReadUInt16();
            MinorVersion        = pBR.ReadUInt16();
            AmountONamefEntries = pBR.ReadUInt16();
            AmountOfIDEntries   = pBR.ReadUInt16();

            for (int i = 0; i < AmountOfIDEntries; i++)
            {
                ResourceDirectoryEntry rde = new ResourceDirectoryEntry();
                rde.Read(pBR, pStartOffset);

                IDEntries.Add(rde.Name, rde);
            }

            foreach (var kvp in IDEntries)
            {
                pBR.BaseStream.Position = pStartOffset + kvp.Value.OffsetToData;
                kvp.Value.ReadInner(pBR, pStartOffset);
            }
        }
Exemple #2
0
        public ResourceEntry GetEntryInfo(int id)
        {
            if (IsLeaf)
            {
                throw new Exception("Is a leaf");
            }

            ResourceDirectory rd = (ResourceDirectory)InnerObject;

            if (!rd.IDEntries.ContainsKey(id))
            {
                return(null);
            }

            ResourceDirectoryEntry rde = rd.IDEntries[id];

            if (rde.IsLeaf)
            {
                throw new Exception("Entry with ID is a leaf!");
            }

            ResourceDirectory      rd2  = (ResourceDirectory)rde.InnerObject;
            ResourceDirectoryEntry rde2 = rd2.IDEntries.First().Value;

            if (!rde2.IsLeaf)
            {
                throw new Exception("Entry with ID is NOT a leaf!");
            }


            return(rde2.InnerObject as ResourceEntry);
        }