예제 #1
0
        public static new ArrayMarshalDescriptor FromReader(IBinaryStreamReader reader)
        {
            var descriptor = new ArrayMarshalDescriptor((NativeType) reader.ReadByte());

            uint value;
            if (!reader.TryReadCompressedUInt32(out value))
                return descriptor;
            descriptor.ParameterIndex = (int)value;
            if (!reader.TryReadCompressedUInt32(out value))
                return descriptor;
            descriptor.NumberOfElements = (int)value;
            return descriptor;
        }
예제 #2
0
        public bool Equals(ArrayMarshalDescriptor x, ArrayMarshalDescriptor y)
        {
            if (x == null && y == null)
            {
                return(true);
            }
            if (x == null || y == null)
            {
                return(false);
            }

            return(x.ElementType == y.ElementType &&
                   x.NumberOfElements.Equals(y.NumberOfElements) &&
                   x.ParameterIndex.Equals(y.ParameterIndex));
        }
        public new static ArrayMarshalDescriptor FromReader(IBinaryStreamReader reader)
        {
            var  descriptor = new ArrayMarshalDescriptor((NativeType)reader.ReadByte());
            uint value;

            if (!reader.TryReadCompressedUInt32(out value))
            {
                return(descriptor);
            }
            descriptor.ParameterIndex = (int)value;
            if (!reader.TryReadCompressedUInt32(out value))
            {
                return(descriptor);
            }
            descriptor.NumberOfElements = (int)value;
            return(descriptor);
        }
예제 #4
0
        public void CreateArrayMarshalDescriptor()
        {
            var assembly   = Utilities.CreateTempNetAssembly();
            var descriptor = new ArrayMarshalDescriptor(NativeType.U4)
            {
                NumberOfElements = 5,
                ParameterIndex   = 1,
            };

            var newDescriptor = BuildAppWithDescriptor(assembly,
                                                       new SzArrayTypeSignature(assembly.NetDirectory.MetadataHeader.TypeSystem.Int32),
                                                       descriptor, false);

            Assert.AreEqual(descriptor.ElementType, newDescriptor.ElementType);
            Assert.AreEqual(descriptor.NumberOfElements, newDescriptor.NumberOfElements);
            Assert.AreEqual(descriptor.ParameterIndex, newDescriptor.ParameterIndex);
        }
예제 #5
0
        public static MarshalDescriptor FromReader(IBinaryStreamReader reader)
        {
            var type = (NativeType)reader.ReadByte();

            switch (type)
            {
            case NativeType.Array:
                return(ArrayMarshalDescriptor.FromReader(reader));

            case NativeType.FixedArray:
                return(FixedArrayMarshalDescriptor.FromReader(reader));

            case NativeType.SafeArray:
                return(SafeArrayMarshalDescriptor.FromReader(reader));

            case NativeType.CustomMarshaler:
                return(CustomMarshalDescriptor.FromReader(reader));

            default:
                return(new SimpleMarshalDescriptor(type));
            }
        }