示例#1
0
        unsafe uint IMetaDataImport.GetTypeDefProps(uint td, IntPtr szTypeDef, uint cchTypeDef, out uint pchTypeDef, IntPtr pdwTypeDefFlags)
        {
            pchTypeDef = 0;
            if (td == 0)
            {
                return(0);
            }
            ITypeReference t = null;

            if ((td & 0xFF000000) == 0x1B000000)
            {
                t = this.writer.typeSpecList[(int)(td & 0xFFFFFF) - 1];
                IGenericTypeInstanceReference gt = t as IGenericTypeInstanceReference;
                if (gt != null)
                {
                    t = gt.GenericType;
                }
            }
            else
            {
                t = this.writer.typeDefList[(int)(td & 0xFFFFFF) - 1];
            }
            string tName;
            uint   parentToken = 0;

            if (this.lastTd == td)
            {
                tName       = this.lastTName;
                parentToken = this.lastParentToken;
            }
            else
            {
                tName          = TypeHelper.GetTypeName(t, NameFormattingOptions.UseGenericTypeNameSuffix | NameFormattingOptions.OmitContainingType);
                this.lastTd    = td;
                this.lastTName = tName;
                ITypeReference bc = null;
                foreach (ITypeReference baseClassRef in t.ResolvedType.BaseClasses)
                {
                    bc = baseClassRef;
                }
                if (bc != null)
                {
                    parentToken = (uint)this.writer.GetTypeToken(bc);
                }
                this.lastParentToken = parentToken;
            }
            pchTypeDef = (uint)tName.Length;
            if (pchTypeDef >= cchTypeDef)
            {
                pchTypeDef = cchTypeDef - 1;
            }
            char *pTypeDef = (char *)szTypeDef.ToPointer();

            for (int i = 0; i < pchTypeDef; i++)
            {
                *(pTypeDef + i) = tName[i];
            }
            *(pTypeDef + pchTypeDef) = (char)0;
            uint *pFlags = (uint *)pdwTypeDefFlags.ToPointer();

            *(pFlags) = PeWriter.GetTypeDefFlags(t.ResolvedType);
            return(parentToken);
        }