public virtual void VisitMarshalSpec(MarshalSpec marshalSpec) { }
public override void VisitMarshalSpec (MarshalSpec marshalSpec) { if (marshalSpec.Container is FieldDefinition) { FieldReference fr = (FieldReference) marshalSpec.Container; TypeReference tr = GetTypeReference (fr.DeclaringType); if (tr is TypeDefinition) marshalSpec.Container = (tr as TypeDefinition).Fields.GetField (fr.Name); else throw new ArgumentException ("Can't found field:" + fr.DeclaringType.FullName + "::" + fr.Name); } }
public override void VisitMarshalSpec(MarshalSpec marshalSpec) { FieldMarshalTable fmTable = m_tableWriter.GetFieldMarshalTable (); FieldMarshalRow fmRow = m_rowWriter.CreateFieldMarshalRow ( marshalSpec.Container.MetadataToken, m_sigWriter.AddMarshalSig (GetMarshalSig (marshalSpec))); fmTable.Rows.Add (fmRow); }
static MarshalSig GetMarshalSig(MarshalSpec mSpec) { MarshalSig ms = new MarshalSig (mSpec.NativeIntrinsic); if (mSpec is ArrayMarshalSpec) { ArrayMarshalSpec amd = mSpec as ArrayMarshalSpec; MarshalSig.Array ar = new MarshalSig.Array (); ar.ArrayElemType = amd.ElemType; ar.NumElem = amd.NumElem; ar.ParamNum = amd.ParamNum; ar.ElemMult = amd.ElemMult; ms.Spec = ar; } else if (mSpec is CustomMarshalerSpec) { CustomMarshalerSpec cmd = mSpec as CustomMarshalerSpec; MarshalSig.CustomMarshaler cm = new MarshalSig.CustomMarshaler (); cm.Guid = cmd.Guid.ToString (); cm.UnmanagedType = cmd.UnmanagedType; cm.ManagedType = cmd.ManagedType; cm.Cookie = cmd.Cookie; ms.Spec = cm; } else if (mSpec is FixedArraySpec) { FixedArraySpec fad = mSpec as FixedArraySpec; MarshalSig.FixedArray fa = new MarshalSig.FixedArray (); fa.ArrayElemType = fad.ElemType; fa.NumElem = fad.NumElem; ms.Spec = fa; } else if (mSpec is FixedSysStringSpec) { MarshalSig.FixedSysString fss = new MarshalSig.FixedSysString (); fss.Size = (mSpec as FixedSysStringSpec).Size; ms.Spec = fss; } else if (mSpec is SafeArraySpec) { MarshalSig.SafeArray sa = new MarshalSig.SafeArray (); sa.ArrayElemType = (mSpec as SafeArraySpec).ElemType; ms.Spec = sa; } return ms; }
public void VisitMarshalSpec(MarshalSpec marshalSpec) { }