コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: MarshalSpec.cs プロジェクト: NALSS/Telegraph
 public CustomMarshalerSpec(IHasMarshalSpec container)
     : base(NativeType.CUSTOMMARSHALER, container)
 {
 }
コード例 #3
0
ファイル: MarshalSpec.cs プロジェクト: NALSS/Telegraph
 public ArrayMarshalSpec(IHasMarshalSpec container)
     : base(NativeType.ARRAY, container)
 {
 }
コード例 #4
0
ファイル: MarshalSpec.cs プロジェクト: NALSS/Telegraph
 public SafeArraySpec(IHasMarshalSpec container)
     : base(NativeType.SAFEARRAY, container)
 {
 }
コード例 #5
0
ファイル: MarshalSpec.cs プロジェクト: NALSS/Telegraph
 public MarshalSpec(NativeType natIntr, IHasMarshalSpec container)
 {
     m_natIntr = natIntr;
     m_container = container;
 }
コード例 #6
0
ファイル: MarshalSpec.cs プロジェクト: NALSS/Telegraph
 public FixedSysStringSpec(IHasMarshalSpec container)
     : base(NativeType.FIXEDSYSSTRING, container)
 {
 }
コード例 #7
0
ファイル: MarshalSpec.cs プロジェクト: NALSS/Telegraph
 public FixedArraySpec(IHasMarshalSpec container)
     : base(NativeType.FIXEDARRAY, container)
 {
 }
コード例 #8
0
ファイル: ReflectionReader.cs プロジェクト: contra/DotNOS
 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);
     }
 }
コード例 #9
0
ファイル: MarshalSpec.cs プロジェクト: lewing/runtime-assets
 public CustomMarshalerSpec(IHasMarshalSpec container) : base(NativeType.CUSTOMMARSHALER, container)
 {
 }
コード例 #10
0
ファイル: MarshalSpec.cs プロジェクト: nobled/mono
		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;
		}
コード例 #11
0
ファイル: MarkStep.cs プロジェクト: tigerhu67/monobuildtools
        void MarkMarshalSpec(IHasMarshalSpec spec)
        {
            CustomMarshalerSpec marshaler = spec.MarshalSpec as CustomMarshalerSpec;
            if (marshaler == null)
                return;

            TypeDefinition type = _context.GetType (marshaler.ManagedType);
            MarkType (type);
        }
コード例 #12
0
ファイル: MarshalSpec.cs プロジェクト: nobled/mono
		public virtual MarshalSpec CloneInto (IHasMarshalSpec container)
		{
			return new MarshalSpec (m_natIntr, container);
		}
コード例 #13
0
ファイル: MarshalSpec.cs プロジェクト: nobled/mono
		public override MarshalSpec CloneInto (IHasMarshalSpec container)
		{
			FixedSysStringSpec spec = new FixedSysStringSpec (container);
			spec.m_size = m_size;
			return spec;
		}
コード例 #14
0
ファイル: MarshalSpec.cs プロジェクト: nobled/mono
		public override MarshalSpec CloneInto (IHasMarshalSpec container)
		{
			FixedArraySpec spec = new FixedArraySpec (container);
			spec.m_numElem = m_numElem;
			spec.m_elemType = m_elemType;
			return spec;
		}
コード例 #15
0
ファイル: MarshalSpec.cs プロジェクト: nobled/mono
		public override MarshalSpec CloneInto(IHasMarshalSpec container)
		{
			SafeArraySpec spec = new SafeArraySpec	(container);
			spec.m_elemType = m_elemType;
			return spec;
		}
コード例 #16
0
ファイル: MarshalSpec.cs プロジェクト: nobled/mono
		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;
		}