Exemplo n.º 1
0
        void enumerateTypeDefinitions()
        {
            //Handle of the enumeration.
            uint enumHandle = 0;
            //We will read maximum 10 TypeDefs at once which will be stored in this array.
            var typeDefs = new uint[10];
            //Number of read TypeDefs.
            uint count;

            _import.EnumTypeDefs(ref enumHandle, typeDefs, Convert.ToUInt32(typeDefs.Length), out count);

            _types = new List <MetadataType>();
            //Continue reading TypeDef's while he typeDefs array contains any new TypeDef.
            while (count > 0)
            {
                for (uint typeDefsIndex = 0; typeDefsIndex < count; typeDefsIndex++)
                {
                    _types.Add(new MetadataType(_import, typeDefs[typeDefsIndex]));
                }

                _import.EnumTypeDefs(ref enumHandle, typeDefs, Convert.ToUInt32(typeDefs.Length), out count);
            }

            _import.CloseEnum(enumHandle);
        }
Exemplo n.º 2
0
        public uint FindTypeDef(string szTypeDef)
        {
            IntPtr hEnum = new IntPtr();
            uint   cDefs, maxcDefs = 10;

            uint[] typeDefs = new uint[maxcDefs];

            importer.EnumTypeDefs(ref hEnum, typeDefs, maxcDefs, out cDefs);
            while (cDefs > 0)
            {
                for (int i = 0; i < cDefs; i++)
                {
                    TypeDefProps props = GetTypeDefProps(typeDefs[i]);
                    if (props.tName == szTypeDef)
                    {
                        importer.CloseEnum(hEnum);
                        return(typeDefs[i]);
                    }
                }
                importer.EnumTypeDefs(ref hEnum, typeDefs, maxcDefs, out cDefs);
            }
            return(0);
        }
Exemplo n.º 3
0
        public List <uint> GetTypes()
        {
            List <uint> result = new List <uint>();

            uint typeEnum = 0;

            uint[] types     = new uint[256];
            uint   typeCount = 0;

            while ((m_import.EnumTypeDefs(ref typeEnum, types, 256, out typeCount) == 0) && (typeCount > 0))
            {
                for (int i = 0; i < typeCount; i++)
                {
                    result.Add(types[i]);
                }
            }

            return(result);
        }
Exemplo n.º 4
0
		public unsafe static uint[] GetTypeDefTokens(IMetaDataImport mdi) {
			if (mdi == null)
				return new uint[0];

			IntPtr iter = IntPtr.Zero;
			try {
				uint count;
				int hr = mdi.EnumTypeDefs(ref iter, IntPtr.Zero, 0, out count);
				if (hr < 0)
					return new uint[0];

				uint ulCount = 0;
				hr = mdi.CountEnum(iter, ref ulCount);
				if (hr < 0)
					return new uint[0];

				hr = mdi.ResetEnum(iter, 0);
				if (hr < 0)
					return new uint[0];

				// The global type isn't included
				uint[] tokens = new uint[ulCount + 1];
				if (tokens.Length > 1) {
					fixed (uint* p = &tokens[1])
						hr = mdi.EnumTypeDefs(ref iter, new IntPtr(p), ulCount, out count);
				}
				if (hr < 0)
					return new uint[0];
				tokens[0] = 0x02000001;
				return tokens;
			}
			finally {
				if (iter != IntPtr.Zero)
					mdi.CloseEnum(iter);
			}
		}