Exemplo n.º 1
0
 internal static void SetFieldMarshal(this IHasFieldMarshal owner, LazyValue <FieldMarshal> container, FieldMarshal newValue)
 {
     if (newValue != null && newValue.Parent != null)
     {
         throw new InvalidOperationException("Field marshal is already added to another member.");
     }
     if (container.Value != null)
     {
         container.Value.Parent = null;
     }
     container.Value = newValue;
     if (newValue != null)
     {
         newValue.Parent = owner;
     }
 }
Exemplo n.º 2
0
        private void AddFieldMarshal(MetadataToken ownerToken, IHasFieldMarshal owner)
        {
            if (owner.MarshalDescriptor is null)
            {
                return;
            }

            var table   = Metadata.TablesStream.GetSortedTable <IHasFieldMarshal, FieldMarshalRow>(TableIndex.FieldMarshal);
            var encoder = Metadata.TablesStream.GetIndexEncoder(CodedIndex.HasFieldMarshal);

            var row = new FieldMarshalRow(
                encoder.EncodeToken(ownerToken),
                Metadata.BlobStream.GetBlobIndex(this, owner.MarshalDescriptor, DiagnosticBag));

            table.Add(owner, row);
        }
Exemplo n.º 3
0
        void CopyMarshalType(IHasFieldMarshal source, IHasFieldMarshal dest)
        {
            if (!source.HasMarshalType)
            {
                return;
            }
            switch (source.MarshalType)
            {
            case SafeArrayMarshalType s:
                dest.MarshalType = new SafeArrayMarshalType(s.VariantType, Importer.Import(s.UserDefinedSubType));
                break;

            case CustomMarshalType s:
                dest.MarshalType = new CustomMarshalType(s.Guid, s.NativeTypeName,
                                                         Importer.Import(s.CustomMarshaler), s.Cookie);
                break;

            default:
                dest.MarshalType = source.MarshalType;
                break;
            }
        }
Exemplo n.º 4
0
 public FieldMarshal(IHasFieldMarshal parent, MarshalDescriptor marshalDescriptor)
     : base(null, new MetadataToken(MetadataTokenType.FieldMarshal), new MetadataRow <uint, uint>())
 {
     _parent            = new LazyValue <IHasFieldMarshal>(parent);
     _marshalDescriptor = new LazyValue <MarshalDescriptor>(marshalDescriptor);
 }