public void WriteMarshalInfo(MarshalInfo marshal_info) { this.WriteNativeType(marshal_info.native); NativeType native = marshal_info.native; if (native == NativeType.FixedSysString) { FixedSysStringMarshalInfo fixedSysStringMarshalInfo = (FixedSysStringMarshalInfo)marshal_info; if (fixedSysStringMarshalInfo.size > -1) { base.WriteCompressedUInt32((uint)fixedSysStringMarshalInfo.size); } return; } switch (native) { case NativeType.SafeArray: { SafeArrayMarshalInfo safeArrayMarshalInfo = (SafeArrayMarshalInfo)marshal_info; if (safeArrayMarshalInfo.element_type != VariantType.None) { this.WriteVariantType(safeArrayMarshalInfo.element_type); } return; } case NativeType.FixedArray: { FixedArrayMarshalInfo fixedArrayMarshalInfo = (FixedArrayMarshalInfo)marshal_info; if (fixedArrayMarshalInfo.size > -1) { base.WriteCompressedUInt32((uint)fixedArrayMarshalInfo.size); } if (fixedArrayMarshalInfo.element_type != NativeType.None) { this.WriteNativeType(fixedArrayMarshalInfo.element_type); } return; } default: switch (native) { case NativeType.Array: { ArrayMarshalInfo arrayMarshalInfo = (ArrayMarshalInfo)marshal_info; if (arrayMarshalInfo.element_type != NativeType.None) { this.WriteNativeType(arrayMarshalInfo.element_type); } if (arrayMarshalInfo.size_parameter_index > -1) { base.WriteCompressedUInt32((uint)arrayMarshalInfo.size_parameter_index); } if (arrayMarshalInfo.size > -1) { base.WriteCompressedUInt32((uint)arrayMarshalInfo.size); } if (arrayMarshalInfo.size_parameter_multiplier > -1) { base.WriteCompressedUInt32((uint)arrayMarshalInfo.size_parameter_multiplier); } return; } case NativeType.LPStruct: break; case NativeType.CustomMarshaler: { CustomMarshalInfo customMarshalInfo = (CustomMarshalInfo)marshal_info; this.WriteUTF8String((customMarshalInfo.guid != Guid.Empty) ? customMarshalInfo.guid.ToString() : string.Empty); this.WriteUTF8String(customMarshalInfo.unmanaged_type); this.WriteTypeReference(customMarshalInfo.managed_type); this.WriteUTF8String(customMarshalInfo.cookie); break; } default: return; } return; } }
public MarshalInfo ReadMarshalInfo() { NativeType nativeType = this.ReadNativeType(); NativeType nativeType2 = nativeType; if (nativeType2 == NativeType.FixedSysString) { FixedSysStringMarshalInfo fixedSysStringMarshalInfo = new FixedSysStringMarshalInfo(); if (this.CanReadMore()) { fixedSysStringMarshalInfo.size = (int)base.ReadCompressedUInt32(); } return(fixedSysStringMarshalInfo); } switch (nativeType2) { case NativeType.SafeArray: { SafeArrayMarshalInfo safeArrayMarshalInfo = new SafeArrayMarshalInfo(); if (this.CanReadMore()) { safeArrayMarshalInfo.element_type = this.ReadVariantType(); } return(safeArrayMarshalInfo); } case NativeType.FixedArray: { FixedArrayMarshalInfo fixedArrayMarshalInfo = new FixedArrayMarshalInfo(); if (this.CanReadMore()) { fixedArrayMarshalInfo.size = (int)base.ReadCompressedUInt32(); } if (this.CanReadMore()) { fixedArrayMarshalInfo.element_type = this.ReadNativeType(); } return(fixedArrayMarshalInfo); } default: switch (nativeType2) { case NativeType.Array: { ArrayMarshalInfo arrayMarshalInfo = new ArrayMarshalInfo(); if (this.CanReadMore()) { arrayMarshalInfo.element_type = this.ReadNativeType(); } if (this.CanReadMore()) { arrayMarshalInfo.size_parameter_index = (int)base.ReadCompressedUInt32(); } if (this.CanReadMore()) { arrayMarshalInfo.size = (int)base.ReadCompressedUInt32(); } if (this.CanReadMore()) { arrayMarshalInfo.size_parameter_multiplier = (int)base.ReadCompressedUInt32(); } return(arrayMarshalInfo); } case NativeType.CustomMarshaler: { CustomMarshalInfo customMarshalInfo = new CustomMarshalInfo(); string text = this.ReadUTF8String(); customMarshalInfo.guid = ((!string.IsNullOrEmpty(text)) ? new Guid(text) : Guid.Empty); customMarshalInfo.unmanaged_type = this.ReadUTF8String(); customMarshalInfo.managed_type = this.ReadTypeReference(); customMarshalInfo.cookie = this.ReadUTF8String(); return(customMarshalInfo); } } return(new MarshalInfo(nativeType)); } }