public static CodeAttributeDeclaration MarshalAsDeclaration(UnmanagedType type, CodeTypeReference customMarshaler = null) { var value = new CodeAttributeDeclaration( new CodeTypeReference(typeof(MarshalAsAttribute)), new CodeAttributeArgument( new CodePropertyReferenceExpression( new CodeTypeReferenceExpression(typeof(UnmanagedType)), type.ToString()))); if (type == UnmanagedType.CustomMarshaler) { value.Arguments.Add( new CodeAttributeArgument( "MarshalTypeRef", new CodeTypeOfExpression( customMarshaler))); } return(value); }
public override string ToText() { var builder = new StringBuilder(); builder.Append("MarshalAs(UnmanagedType."); builder.Append(UnmanagedType.ToString()); if (ArraySubType.HasValue) { builder.Append(", ArraySubType = UnmanagedType."); builder.Append(ArraySubType.Value.ToString()); } if (SizeParamIndex.HasValue) { builder.Append(", SizeParamIndex = "); builder.Append(SizeParamIndex.Value.ToString(CultureInfo.InvariantCulture)); } if (SizeConst.HasValue) { builder.Append(", SizeConst = "); builder.Append(SizeConst.Value.ToString(CultureInfo.InvariantCulture)); } if (MarshalType != null) { builder.Append(", MarshalType = ").Append(MarshalType); } if (MarshalTypeRef != null) { builder.Append(", MarshalTypeRef = ").Append(MarshalTypeRef); } if (MarshalCookie != null) { builder.Append(", MarshalCookie = ").Append(MarshalCookie); } builder.Append(")"); return(builder.ToString()); }
public bool PosTest2() { bool retVal = true; TestLibrary.TestFramework.BeginScenario("PosTest2: Return the field ArraySubType in MarshalAsAttribute class 2"); try { MarshalAsAttribute myMarshalAsAttribute = new MarshalAsAttribute(UnmanagedType.ByValArray | UnmanagedType.LPArray); UnmanagedType myVal = myMarshalAsAttribute.ArraySubType; if (myVal != 0) { TestLibrary.TestFramework.LogError("003", "the ExpectResult is 0 but the ActualResult is " + myVal.ToString()); retVal = false; } } catch (Exception e) { TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e); retVal = false; } return(retVal); }
public bool PosTest1() { bool retVal = true; TestLibrary.TestFramework.BeginScenario("PosTest1: Return the field ArraySubType in MarshalAsAttribute class 1"); try { short unmanagedType = Int16.MaxValue; MarshalAsAttribute myMarshalAsAttribute = new MarshalAsAttribute(unmanagedType); UnmanagedType myVal = myMarshalAsAttribute.ArraySubType; if (myVal != 0) { TestLibrary.TestFramework.LogError("001", "the ExpectResult is 0 but the ActualResult is " + myVal.ToString()); retVal = false; } } catch (Exception e) { TestLibrary.TestFramework.LogError("002", "Unexpect exception:" + e); retVal = false; } return(retVal); }
static internal CodeAttributeDeclaration CreateUnmanagedTypeAttribute(UnmanagedType type) { CodeAttributeDeclaration decl = new CodeAttributeDeclaration(new CodeTypeReference(typeof(MarshalAsAttribute))); decl.Arguments.Add(new CodeAttributeArgument(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(UnmanagedType)), type.ToString()))); return(decl); }
static internal CodeAttributeDeclaration CreateArrayParamTypeAttribute(UnmanagedType arraySubType, CodeAttributeArgument sizeArg) { CodeAttributeDeclaration decl = CreateUnmanagedTypeAttribute(UnmanagedType.LPArray); decl.Arguments.Add(new CodeAttributeArgument("ArraySubType", new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(UnmanagedType)), arraySubType.ToString()))); decl.Arguments.Add(sizeArg); return(decl); }
public bool PosTest2() { bool retVal = true; TestLibrary.TestFramework.BeginScenario("PosTest2: Return the property Value in MarshalAsAttribute class 2"); try { MarshalAsAttribute myMarshalAsAttribute = new MarshalAsAttribute(UnmanagedType.Currency); UnmanagedType myValue = myMarshalAsAttribute.Value; if (myValue != UnmanagedType.Currency) { TestLibrary.TestFramework.LogError("003", "the ExpectResult is " + UnmanagedType.Currency.ToString() + " but the ActualResult is " + myValue.ToString()); retVal = false; } } catch (Exception e) { TestLibrary.TestFramework.LogError("004", "Unexpect exception:" + e); retVal = false; } return(retVal); }