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 virtual void VisitMarshalSpec(MarshalSpec marshalSpec)
        {

        }
Example #4
0
        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);
        }
Example #5
0
        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) { }