Esempio n. 1
0
        public override Address GetAddress(ClrAppDomain appDomain)
        {
            if (_containingType == null)
                return 0;

            bool shared = _containingType.Shared;

            IDomainLocalModuleData data = null;
            if (shared)
            {
                Address id = _containingType.DesktopModule.ModuleId;
                data = _containingType.DesktopHeap.DesktopRuntime.GetDomainLocalModule(appDomain.Address, id);
                if (!IsInitialized(data))
                    return 0;
            }
            else
            {
                Address modAddr = _containingType.GetModuleAddress(appDomain);
                if (modAddr != 0)
                    data = _containingType.DesktopHeap.DesktopRuntime.GetDomainLocalModule(modAddr);
            }

            if (data == null)
                return 0;

            Address addr;
            if (DesktopRuntimeBase.IsPrimitive(ElementType))
                addr = data.NonGCStaticDataStart + _field.Offset;
            else
                addr = data.GCStaticDataStart + _field.Offset;

            return addr;
        }
Esempio n. 2
0
        public override ulong GetAddress(ClrAppDomain appDomain)
        {
            if (_containingType == null)
            {
                return(0);
            }

            bool shared = _containingType.Shared;

            IDomainLocalModuleData data = null;

            if (shared)
            {
                ulong id = _containingType.DesktopModule.ModuleId;
                data = _containingType.DesktopHeap.DesktopRuntime.GetDomainLocalModule(appDomain.Address, id);
                if (!IsInitialized(data))
                {
                    return(0);
                }
            }
            else
            {
                ulong modAddr = _containingType.GetModuleAddress(appDomain);
                if (modAddr != 0)
                {
                    data = _containingType.DesktopHeap.DesktopRuntime.GetDomainLocalModule(modAddr);
                }
            }

            if (data == null)
            {
                return(0);
            }

            ulong addr;

            if (DesktopRuntimeBase.IsPrimitive(ElementType))
            {
                addr = data.NonGCStaticDataStart + _field.Offset;
            }
            else
            {
                addr = data.GCStaticDataStart + _field.Offset;
            }

            return(addr);
        }