internal static bool IsDefined(RuntimeFieldInfo field) { return(MarshalAsAttribute.GetCustomAttribute(field) != null); }
internal static bool IsDefined(RuntimeParameterInfo parameter) { return(MarshalAsAttribute.GetCustomAttribute(parameter) != null); }
internal static Attribute GetCustomAttribute(RuntimeFieldInfo field) { return(MarshalAsAttribute.GetCustomAttribute(field.MetadataToken, field.GetRuntimeModule())); }
private void Init(MarshalAsAttribute marshalAs) { Type type = typeof(MarshalAsAttribute); this.m_ctor = type.GetConstructors(BindingFlags.Public | BindingFlags.Instance)[0]; CustomAttributeTypedArgument[] array = new CustomAttributeTypedArgument[] { new CustomAttributeTypedArgument(marshalAs.Value) }; this.m_typedCtorArgs = Array.AsReadOnly<CustomAttributeTypedArgument>(array); int num = 3; if (marshalAs.MarshalType != null) { num++; } if (marshalAs.MarshalTypeRef != null) { num++; } if (marshalAs.MarshalCookie != null) { num++; } num++; num++; if (marshalAs.SafeArrayUserDefinedSubType != null) { num++; } CustomAttributeNamedArgument[] argumentArray = new CustomAttributeNamedArgument[num]; num = 0; argumentArray[num++] = new CustomAttributeNamedArgument(type.GetField("ArraySubType"), marshalAs.ArraySubType); argumentArray[num++] = new CustomAttributeNamedArgument(type.GetField("SizeParamIndex"), marshalAs.SizeParamIndex); argumentArray[num++] = new CustomAttributeNamedArgument(type.GetField("SizeConst"), marshalAs.SizeConst); argumentArray[num++] = new CustomAttributeNamedArgument(type.GetField("IidParameterIndex"), marshalAs.IidParameterIndex); argumentArray[num++] = new CustomAttributeNamedArgument(type.GetField("SafeArraySubType"), marshalAs.SafeArraySubType); if (marshalAs.MarshalType != null) { argumentArray[num++] = new CustomAttributeNamedArgument(type.GetField("MarshalType"), marshalAs.MarshalType); } if (marshalAs.MarshalTypeRef != null) { argumentArray[num++] = new CustomAttributeNamedArgument(type.GetField("MarshalTypeRef"), marshalAs.MarshalTypeRef); } if (marshalAs.MarshalCookie != null) { argumentArray[num++] = new CustomAttributeNamedArgument(type.GetField("MarshalCookie"), marshalAs.MarshalCookie); } if (marshalAs.SafeArrayUserDefinedSubType != null) { argumentArray[num++] = new CustomAttributeNamedArgument(type.GetField("SafeArrayUserDefinedSubType"), marshalAs.SafeArrayUserDefinedSubType); } this.m_namedArgs = Array.AsReadOnly<CustomAttributeNamedArgument>(argumentArray); }
internal static Attribute GetCustomAttribute(RuntimeParameterInfo parameter) { return(MarshalAsAttribute.GetCustomAttribute(parameter.MetadataToken, parameter.GetRuntimeModule())); }
internal MarshalAsAttribute ToMarshalAsAttribute () { MarshalAsAttribute attr = new MarshalAsAttribute (t); attr.ArraySubType = tbase; attr.MarshalCookie = mcookie; attr.MarshalType = marshaltype; attr.MarshalTypeRef = marshaltyperef; if (count == -1) attr.SizeConst = 0; else attr.SizeConst = count; if (param_num == -1) attr.SizeParamIndex = 0; else attr.SizeParamIndex = (short)param_num; return attr; }
/* to build a ParameterInfo for the return type of a method */ internal ParameterInfo (Type type, MemberInfo member, MarshalAsAttribute marshalAs) { this.ClassImpl = type; this.MemberImpl = member; this.NameImpl = ""; this.PositionImpl = -1; // since parameter positions are zero-based, return type pos is -1 this.AttrsImpl = ParameterAttributes.Retval; this.marshalAs = marshalAs; }
/// <summary> /// Builds the marshal as attribute. /// </summary> /// <param name="marshalAsAttribute">The marshal as attribute.</param> /// <param name="isReturn">if set to <c>true</c> [is return].</param> /// <returns></returns> public static string BuildMarshalAsAttribute(MarshalAsAttribute marshalAsAttribute, bool isReturn) { var builder = new StringBuilder(); builder.AppendFormat("[{0}MarshalAs(", isReturn ? "return: " : string.Empty); builder.AppendFormat("UnmanagedType.{0}", marshalAsAttribute.Value); if (marshalAsAttribute.SizeConst != 0) builder.AppendFormat(", SizeConst = {0}", marshalAsAttribute.SizeConst); if (marshalAsAttribute.Value == UnmanagedType.CustomMarshaler) builder.AppendFormat(", MarshalTypeRef = typeof({0})", marshalAsAttribute.MarshalTypeRef); if (marshalAsAttribute.ArraySubType != default(UnmanagedType)) builder.AppendFormat(", ArraySubType = UnmanagedType.{0}", marshalAsAttribute.ArraySubType); builder.Append(")]"); return builder.ToString(); }
private void Init(MarshalAsAttribute marshalAs) { Type type = typeof(MarshalAsAttribute); m_ctor = type.GetConstructors(BindingFlags.Public | BindingFlags.Instance)[0]; m_typedCtorArgs = Array.AsReadOnly(new CustomAttributeTypedArgument[] { new CustomAttributeTypedArgument(marshalAs.Value), }); int i = 3; // ArraySubType, SizeParamIndex, SizeConst if (marshalAs.MarshalType != null) i++; if (marshalAs.MarshalTypeRef != null) i++; if (marshalAs.MarshalCookie != null) i++; i++; // IidParameterIndex i++; // SafeArraySubType if (marshalAs.SafeArrayUserDefinedSubType != null) i++; CustomAttributeNamedArgument[] namedArgs = new CustomAttributeNamedArgument[i]; // For compatibility with previous runtimes, we always include the following 5 attributes, regardless // of if they apply to the UnmanagedType being marshaled or not. i = 0; namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("ArraySubType"), marshalAs.ArraySubType); namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("SizeParamIndex"), marshalAs.SizeParamIndex); namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("SizeConst"), marshalAs.SizeConst); namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("IidParameterIndex"), marshalAs.IidParameterIndex); namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("SafeArraySubType"), marshalAs.SafeArraySubType); if (marshalAs.MarshalType != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("MarshalType"), marshalAs.MarshalType); if (marshalAs.MarshalTypeRef != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("MarshalTypeRef"), marshalAs.MarshalTypeRef); if (marshalAs.MarshalCookie != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("MarshalCookie"), marshalAs.MarshalCookie); if (marshalAs.SafeArrayUserDefinedSubType != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("SafeArrayUserDefinedSubType"), marshalAs.SafeArrayUserDefinedSubType); m_namedArgs = Array.AsReadOnly(namedArgs); }
/* to build a ParameterInfo for the return type of a method */ #if NET_4_0 internal MonoParameterInfo (Type type, MemberInfo member, MarshalAsAttribute marshalAs) {
internal static ParameterInfo New (Type type, MemberInfo member, MarshalAsAttribute marshalAs) { return new MonoParameterInfo (type, member, marshalAs); }
private void Init(MarshalAsAttribute marshalAs) { Type type = typeof(MarshalAsAttribute); m_ctor = type.GetConstructors(BindingFlags.Public | BindingFlags.Instance)[0]; m_typedCtorArgs = Array.AsReadOnly(new CustomAttributeTypedArgument[] { new CustomAttributeTypedArgument(marshalAs.Value), }); int i = 3; // ArraySubType, SizeParamIndex, SizeConst if (marshalAs.MarshalType != null) i++; if (marshalAs.MarshalTypeRef != null) i++; if (marshalAs.MarshalCookie != null) i++; CustomAttributeNamedArgument[] namedArgs = new CustomAttributeNamedArgument[i]; i = 0; namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("ArraySubType"), marshalAs.ArraySubType); namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("SizeParamIndex"), marshalAs.SizeParamIndex); namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("SizeConst"), marshalAs.SizeConst); if (marshalAs.MarshalType != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("MarshalType"), marshalAs.MarshalType); if (marshalAs.MarshalTypeRef != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("MarshalTypeRef"), marshalAs.MarshalTypeRef); if (marshalAs.MarshalCookie != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("MarshalCookie"), marshalAs.MarshalCookie); m_namedArgs = Array.AsReadOnly(namedArgs); }
internal static ParameterInfo New (Type type, MemberInfo member, MarshalAsAttribute marshalAs) { #if NET_4_0 return new MonoParameterInfo (type, member, marshalAs); #else return new ParameterInfo (type, member, marshalAs); #endif }
private void Init(MarshalAsAttribute marshalAs) { Type type = typeof(MarshalAsAttribute); m_ctor = type.GetConstructors(BindingFlags.Public | BindingFlags.Instance)[0]; m_typedCtorArgs = Array.AsReadOnly(new CustomAttributeTypedArgument[] { new CustomAttributeTypedArgument(marshalAs.Value), }); int i = 3; // ArraySubType, SizeParamIndex, SizeConst if (marshalAs.MarshalType != null) i++; if (marshalAs.MarshalTypeRef != null) i++; if (marshalAs.MarshalCookie != null) i++; #if FEATURE_COMINTEROP i++; // IidParameterIndex i++; // SafeArraySubType if (marshalAs.SafeArrayUserDefinedSubType != null) i++; #endif // FEATURE_COMINTEROP CustomAttributeNamedArgument[] namedArgs = new CustomAttributeNamedArgument[i]; i = 0; namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("ArraySubType"), marshalAs.ArraySubType); namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("SizeParamIndex"), marshalAs.SizeParamIndex); namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("SizeConst"), marshalAs.SizeConst); #if FEATURE_COMINTEROP namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("IidParameterIndex"), marshalAs.IidParameterIndex); namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("SafeArraySubType"), marshalAs.SafeArraySubType); #endif // FEATURE_COMINTEROP if (marshalAs.MarshalType != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("MarshalType"), marshalAs.MarshalType); if (marshalAs.MarshalTypeRef != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("MarshalTypeRef"), marshalAs.MarshalTypeRef); if (marshalAs.MarshalCookie != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("MarshalCookie"), marshalAs.MarshalCookie); #if FEATURE_COMINTEROP if (marshalAs.SafeArrayUserDefinedSubType != null) namedArgs[i++] = new CustomAttributeNamedArgument(type.GetField("SafeArrayUserDefinedSubType"), marshalAs.SafeArrayUserDefinedSubType); #endif // FEATURE_COMINTEROP m_namedArgs = Array.AsReadOnly(namedArgs); }