void ReadMarshalSpecs() { if (!m_tHeap.HasTable(FieldMarshalTable.RId)) { return; } FieldMarshalTable fmTable = m_tableReader.GetFieldMarshalTable(); for (int i = 0; i < fmTable.Rows.Count; i++) { FieldMarshalRow fmRow = fmTable [i]; if (fmRow.Parent.RID == 0) { continue; } IHasMarshalSpec owner = null; switch (fmRow.Parent.TokenType) { case TokenType.Field: owner = GetFieldDefAt(fmRow.Parent.RID); break; case TokenType.Param: owner = GetParamDefAt(fmRow.Parent.RID); break; } owner.MarshalSpec = BuildMarshalDesc( m_sigReader.GetMarshalSig(fmRow.NativeType), owner); } }
public CustomMarshalerSpec(IHasMarshalSpec container) : base(NativeType.CUSTOMMARSHALER, container) { }
public ArrayMarshalSpec(IHasMarshalSpec container) : base(NativeType.ARRAY, container) { }
public SafeArraySpec(IHasMarshalSpec container) : base(NativeType.SAFEARRAY, container) { }
public MarshalSpec(NativeType natIntr, IHasMarshalSpec container) { m_natIntr = natIntr; m_container = container; }
public FixedSysStringSpec(IHasMarshalSpec container) : base(NativeType.FIXEDSYSSTRING, container) { }
public FixedArraySpec(IHasMarshalSpec container) : base(NativeType.FIXEDARRAY, container) { }
protected MarshalSpec BuildMarshalDesc(MarshalSig ms, IHasMarshalSpec container) { if (ms.Spec is MarshalSig.Array) { ArrayMarshalSpec amd = new ArrayMarshalSpec (container); MarshalSig.Array ar = (MarshalSig.Array) ms.Spec; amd.ElemType = ar.ArrayElemType; amd.NumElem = ar.NumElem; amd.ParamNum = ar.ParamNum; amd.ElemMult = ar.ElemMult; return amd; } else if (ms.Spec is MarshalSig.CustomMarshaler) { CustomMarshalerSpec cmd = new CustomMarshalerSpec (container); MarshalSig.CustomMarshaler cmsig = (MarshalSig.CustomMarshaler) ms.Spec; cmd.Guid = cmsig.Guid.Length > 0 ? new Guid (cmsig.Guid) : new Guid (); cmd.UnmanagedType = cmsig.UnmanagedType; cmd.ManagedType = cmsig.ManagedType; cmd.Cookie = cmsig.Cookie; return cmd; } else if (ms.Spec is MarshalSig.FixedArray) { FixedArraySpec fad = new FixedArraySpec (container); MarshalSig.FixedArray fasig = (MarshalSig.FixedArray) ms.Spec; fad.ElemType = fasig.ArrayElemType; fad.NumElem = fasig.NumElem; return fad; } else if (ms.Spec is MarshalSig.FixedSysString) { FixedSysStringSpec fssc = new FixedSysStringSpec (container); fssc.Size = ((MarshalSig.FixedSysString) ms.Spec).Size; return fssc; } else if (ms.Spec is MarshalSig.SafeArray) { SafeArraySpec sad = new SafeArraySpec (container); sad.ElemType = ((MarshalSig.SafeArray) ms.Spec).ArrayElemType; return sad; } else { return new MarshalSpec (ms.NativeInstrinsic, container); } }
public override MarshalSpec CloneInto (IHasMarshalSpec container) { ArrayMarshalSpec spec = new ArrayMarshalSpec (container); spec.m_elemType = m_elemType; spec.m_paramNum = m_paramNum; spec.m_elemMult = m_elemMult; spec.m_numElem = m_numElem; return spec; }
void MarkMarshalSpec(IHasMarshalSpec spec) { CustomMarshalerSpec marshaler = spec.MarshalSpec as CustomMarshalerSpec; if (marshaler == null) return; TypeDefinition type = _context.GetType (marshaler.ManagedType); MarkType (type); }
public virtual MarshalSpec CloneInto (IHasMarshalSpec container) { return new MarshalSpec (m_natIntr, container); }
public override MarshalSpec CloneInto (IHasMarshalSpec container) { FixedSysStringSpec spec = new FixedSysStringSpec (container); spec.m_size = m_size; return spec; }
public override MarshalSpec CloneInto (IHasMarshalSpec container) { FixedArraySpec spec = new FixedArraySpec (container); spec.m_numElem = m_numElem; spec.m_elemType = m_elemType; return spec; }
public override MarshalSpec CloneInto(IHasMarshalSpec container) { SafeArraySpec spec = new SafeArraySpec (container); spec.m_elemType = m_elemType; return spec; }
public override MarshalSpec CloneInto (IHasMarshalSpec container) { CustomMarshalerSpec spec = new CustomMarshalerSpec (container); spec.m_guid = m_guid; spec.m_unmanagedType = m_unmanagedType; spec.m_managedType = m_managedType; spec.m_cookie = m_cookie; return spec; }